gdb 调试常用命令 | |
gcc -g mian.c -o main.out | -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 |
gdb main.out | (进入gdb调试环境),调试可执行文件main.out |
list(l) | 显示当前行之后的10行代码(list后面可接行号和函数名,回车继续向下显示) |
回车 | 直接回车,重复上一次执行的命令 |
start(s) | 开始执行程序,并停在main函数的第一条语句处 |
next(n) | 执行下一条语句 |
step(s) | 进入正要执行的函数内部 |
print(p) | 打印变量的值 |
break(b) info breakpoints(i b) delete breakpoints(d) n disable breakpoints n enable breakpoints n |
设置断点 (行号 || 函数名) 查看断点 删除编号为n的断点 使编号为n的断点失效 使编号为n的断点生效 |
run(r) | 连续执行程序,直到遇到断点 |
continue(c) | 继续执行程序,直到遇到下一个断点 |
finish | 跳出当前函数,执行其调用函数 |
jump(j) n | 强制跳转到第n行,若后面没有断点则执行到程序结束 |
print(p) var | 打印变量var的值,打印地址 |
p /x var | 以16进制的值显示var的值 x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。 |
print *a@n | (a是数组名,n是要显示的元素个数), 显示数组a的n个元素 |
set var a=5 | (set var)命令用于修改变量(a)的值 |
display var | 程序每执行一步都会打印var变量的值 |
undisplay n | 取消编号为n的打印 |
info locals | 列出当前函数的局部变量信息 |
x/<n/f/u> <addr> | 查看从addr地址开始的n个字节 n、f、u是可选的参数。 n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义。 f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。 u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。 <addr>表示一个内存地址。 注意:严格区分n和u的关系,n表示单元个数,u表示每个单元的大小。 |
whatis var | 显示变量var的类型 |
ptype var | 显示变量var更详细的类型 |
backtrace(bt) | 查看其调用函数的信息(列出调用栈) |
frame args | 移动到args(args为栈的层次)指定的函数栈帧中去,并打印选中的栈的信息 |
watch var | 当程序访问变量名指定的内存单元时,停止程序 |
info watchpoints | 打印观察点 |
delete watchpoints | 删除观察点 |
quit(q) | 退出gdb调试 |