gcc hello.c -g -o hello 就会生成待调试信息的hello可执行程序
gdb hello 就会进入调试状态
查看源代码:
l 查看main源代码(L的小写,不是数字1),list的缩写
l [filename:linenum] 查看指定文件的指定行的源代码
继续查看按l
l [filename:func] 查看指定文件的指定函数的源代码
继续查看按l
设置断点:
b [linenum] 第几行打断点,或者break的缩写
b [10] if [i==5] 就是在第十行当i等于5时停下
b [func] 在func函数入口处打断点
del/d [num] 删除断点,del即delete,num通过info break查看,没有[num]表示全部删除,num也可以是一个范围,比如(2,8)
disable [num] 禁用断点,num通过info break查看
enable [num] 启用断点,num通过info break查看
查看值:
i b 查看断点,i即info,b即break,
p a 打印变量a的值,p即print
ptype a 打印a的变量类型
display a 追踪变量a,一般循环里面使用
undisplay [num] 不追踪变量,num通过info display查看
set var i=10 直接从i等于10开始执行,一般用于循环里面
运行程序:
start 启动调试,只执行一行代码
r 即run,启动调试,执行到第一个断点的位置
quit 退出调试状态
n 即next,执行下一步
c 即continue,执行到下一个断点处
u 即util,跳出单次循环
s 即step,进入函数
finish 跳出当前函数,需要先删除该函数的所有断点del [num]
多进程调试:
set follow-fork-mode parent 跟踪父进程
set follow-fork-mode child 跟踪子进程
附:一定要在fork之前设置才有效