gdb使用:
1.编译时必须加-g选项,生成调试需要的信息。如 g++ xxx.cpp -o xxx -g
2.调试最好结合core文件
3.调试命令:gdb xxx xxx.core
4.查看堆栈信息:bt
5.查看某条堆栈信息:例如最新的:info 0;然后up命令可以向上查看上一条,down可以查看下一条
6.打断点:b xxx.cpp:999 在 xxx.cpp:999的999行打断点, info b可以查看下断点的位置。打断点还有各种方法可百度
7.gdb下运行程序:run
8.运行到断点处程序停下:c继续执行到下一断点,n执行一行代码,s进入调用函数,p打印需要的变量信息(如p a:打印a变量)
9. list 列出带有行号的源码, 一般指列出一部分, 可以按enter键重复上一个命令, 继续列出。每次list默认显示10行, 当然, 也可以人为更改这个设置。
list 60表示列出第60行左右的代码, 即可能是55-65之间。
list + 显示当前行后, list -显示当前行前
list 55, 65 显示之间的行数
list fun 列出fun函数代码
list可以缩写为l
10. list太死板, 可以用search实现搜索, 如search int main , 可以按enter键继续往下找。search 太固执, 只能朝一个方向找。
可以用reverse-search逆向找, 如reverse-search printf
search和reverse-search支持正则表达式。
11. watch i 监测i, 一旦i的值发生变化, 则停下来, 跟断点有点类似。
rwatch监测读, awatch监测读写(access)
info watchpoints 列举所偶监视点
12. set var i = 100 临时强制更改i的值
13. clear 10 表示删除第10行的断点, delete 2表示删除第2行的断点
14. 当进入一个函数后, 可以用return 100强行返回函数, 后面的语句不执行
15. shell命令, 可以在gdb环境下执行shell中的命令, 如shell ls , 很方便
退出gdb调试:q
参考 http://blog.csdn.net/liigo/archive/2006/01/17/582231.aspx
参考https://blog.csdn.net/stpeace/article/details/38741835#comments