gdb
是Linux下的一个强大的调试工具,它可以完全操控程序运行,具备设置断点、查看程序状态等功能。
gcc编译时使用-g选项插入调试信息。然后启动gdb:
gcc -g main.c -o main
gdb main
使用help
可以随时查看帮助。使用help running
等,可以进一步查看。
list
命令可以列出代码,list
可以简写成l
,什么都不敲直接回车执行上一次执行的指令,如果把.c
文件移走,列出源代码就不好使了。
quit
退出
start
开始执行程序
next
单步执行,简写n
step
进入函数,简写s
backtrace
查看函数调用栈,简写bt
info
查看局部变量,简写i
,lcoals
是局部变量,具体查看help即可
进入子函数查看主函数变量,使用frame
切换栈帧,简写f
打印变量值,$1
等是gdb保存的临时值
finish
,跳出函数
set var
,强行修改一个变量
display
跟踪,每次都显示某个变量,undisplay
取消跟踪
break
,设置断点,简写b
,可以直接continue
到断点位置,continue
简写c
断点可以使用info breakpoints
查看,简写i b
断点的Num是编号,可以用例如delete breakpoints 4
来删除断点,例如disable breakpoints 4
临时禁用断点,简写disable 4
,enable 4
启用断点。
可以根据条件设置断点,例:break 9 if sum != 0
,虽然看上去很强大,但很少使用。
观察点watch,当程序访问到哪个存储单元时中断,例:watch input[5]
。
直接运行程序发生段错误没有提示,使用gdb遇到段错误会自动停下来,一条规律, 如果某个函数的局部变量发生访问越界,有可并不立即产生段错误,而是在函数返回时产生段错误。