GDB的基本用法

gdb是个异常强大的命令行调试工具。需要在编译时加上-g选项,如:

linux$gcc -g test.c -o test

 

基本用法:

1,启动gdb,最简单的形式

linux$gdb ./test

2,显示代码,默认10行,可通过附加+或-,分别表示前向打印或后向打印,默认前向打印(这里看你怎么理解‘前’和‘后’的)

(gdb)list  #简写形式--> l

3,按回车键,重复上一次的命令

4,设置断点,可以是指定的函数名,也可以是任意的一行,还可以附带条件

1 (gdb)break filename:func  #简写形式--> b
2 (gdb)break filename:line  #如果是当前文件,则不需要指定文件名
3 (gdb)break 21 if var==0  #或者分两步走,比如,已经设置了断点break 10,且断点编号为2,
4                                    #则可: condition 2 if var > 1    

5,运行程序

1 (gdb)run  #简写形式--> r
2 (gdb)run < input  #可以重定向标准输入或输出

6,单步调试

1 (gdb)next  #--> n  不进入函数体
2 (gdb)n i   #单步执行i次
3 (gdb)step  #--> s  进入函数体
4 (gdb)s i   #单步i次

7,从当前位置直接运行到下一个断点,或等待输入时,或直到程序终止

(gdb)continue  #--> c

8,显示堆栈信息(函数调用关系)

(gdb)backtrace  #--> bt

9,显示详细的环境信息

1 (gdb)info frame  #显示当前栈帧的详细信息(包括栈帧的地址、寄存器的值、调用当前函数的地址、开发语言、形参及局部变量在栈中的位置等)
2 (gdb)info locals  #显示局部变量,(注意,当某个命令想不起来了,记住首字母,然后按Tab键)
3 (gdb)info breakpoints  #显示断点信息
4 (gdb)info watchpoints  #显示观察点信息,实际上可能与上一个命令重复

10,打印某个指定的变量

1 (gdb)print var  #--> p
2 (gdb)print arr[0]@length  #打印数组

11,设置观察点,一般观察某个表达式(变量也是表达式)

1 (gdb)watch expr  #当表达式的值发生变化时,程序会停下来,并打印变化的信息
2 (gdb)watch var  #当变量的值发生变换时,停住
3 (gdb)rwatch var   #当变量被读时
4 (gdb)awatch var  #当变量被读或被写时

12,设置捕捉点,捕捉程序运行时发生的一些事件,比如C++异常或加载共享库

(gdb)catch Event  #详细请见http://sourceware.org/gdb/onlinedocs/gdb/Set-Catchpoints.html

13,维护停止点(断点、观察点、捕捉点)

1 (gdb)delete    #删除所有的已设置的停止点
2 (gdb)clear    #清除当前停下来的断点,如果有的话,也可以具体指定,如:clear func, clear line...
3 (gdb)disable   #暂时废除某停止点
4 (gdb)enable    #重新激活被废除的停止点

14,退出当前函数体

(gdb)finish    #注意在main函数(最外层)中没意义

15,退出循环体

(gdb)until    #--> u

posted on 2013-07-15 16:11  逆转的旋律  阅读(256)  评论(0)    收藏  举报

导航