GDB(GNU Debugger)是GCC的调试工具
生成调试信息
GDB主要调试的是C/C的程序。首先在编译时, 必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g)的 -g 参数实现
注意:-g 是在可执行程序中加入源码信息,并非将整个源文件嵌入可执行程序。因此调试时候源文件必须仍旧存在;
1 2
| gcc -g hello.c -o hello # 如果没有-g, 你将看不见程序的函数名、变量名, 所代替的全是运行时的内存地址
|
启动gdb
1 2 3 4 5 6
| # 启动gdb gdb program
# 设置运行参数 set args hello world show args
|
显示源码
1 2 3 4 5 6 7
| list # 打印当前行后面的程序 list - # 打印当前文件开始出的源程序 list file: lineNum # 显示file文件下第n行 list file: func # 显示file文件的func函数
set listsize n # 设置一次显示源代码的行数 show listsize # 查看当前listsize的设置
|
设置断点
1 2 3 4 5 6 7 8 9 10 11
| b n b func b file:n b file:func b test.c:8 if intValue == 5
info break
disable m n | m-n enable m n | m-n delete m n | m-n
|
调试代码
1 2 3 4 5 6 7 8 9 10
| run # 停在第一个断点 start # 停在第一条语句
next # 单步跟踪,不进入函数体
step # 单步,函数调用进入函数体内 finish # 退出进入的函数,如果无效,可能是设置有断点
until # 退出循环体 continue# 运行到下一个断点处
|
追踪变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| print var
display var info display
disable display m n | m-n enable display m n | m-n
delete display m n | m-n undisplay m n | m-n
ptype var p var set var i=1
|
多进程调试
1 2
| show follow-fork-mode set follow-fork-mode [parent(默认) | child]
|
1 2
| show detach-on-fork set detach-on-fork [on(默认) | off]
|
1 2 3
| info inferiors inferior id detach inferiors id
|