GDB 的使用

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

posted @ 2017-12-12 10:13  cicero  阅读(207)  评论(0编辑  收藏  举报