GDB概述
一般指Linux环境下,对C/C++为主的计算机程序的调试工具
常用命令及简写
- run(r)–运行程序–r args
- break(b)–设置断点–b 1
- print(p)–打印变量–p var
- next(n)–单步执行
- continue(c)–继续走你
- jump(j)–跳行至–j 1
- list(l)–查看源码–list 5 (查看第5行前后若干行的代码)
调试正在运行的程序
在编译的时候需要加上-g参数。
gdb <prog>
关联上源代码。
然后,用ps命令查到要调试程序的pid,再用attach,挂接到对应的pid。
相对地,detach可以取消挂接。
暂停/恢复程序运行
五种方式:BreakPoint,WatchPoint,CatchPoint,Signals,线程停止。 前四种用得较多。
断点
除了一般地在某行暂停程序,还可以加condition参数,即b if <condition>
观察点
常当观察的变量变化时,暂停程序。 watch you, if you changed, stop!
捕捉点
catch <event>
监控事件,如载入库,fork进程等
信号
handle <signal> <keywords>
这里,我们可能需要了解诸如SIGINT(中断信号)这样的系统信号,以及对信号的处理代号keywords(stop,pass,etc.)
其他有意思的点
有时我们可能希望在某些情况下,断点是无效的,这时我们可以用condition <bnum> <exp>
。
查看源程序
l foo
–查看函数名为foo的源代码l -
–查看当前行(暂停)的前后若干行代码reverse-search <string>
–全文搜索info line 50
–查看50行的内存地址,可通过help info查询更多相关命令
查看运行时的数据
display <exp>
–暂停程序时,自动显示跟踪的变量。- 每一个print命令都会把print的变量,重新额外赋一个编号,按顺序$1,$2…好处呢,不用输又长又臭的变量名啦。
set var=**
–有时,我们需要记录调试过程中的一些有用变量,这时可通过设置GDB的环境变量来解决
改变程序的执行
修改程序的变量值
print x=4
–将程序变量x修改为4
程序跳转
jump <lines>
–跳到文件的某行