GDB
GNU 下的一个调试软件,在linux 下可以用来调试c/c++代码。
启动
可以通过gdb --help
查看用法,如下:
This is the GNU debugger. Usage:
gdb [options] [executable-file [core-file or process-id]]
gdb [options] --args executable-file [inferior-arguments ...]
gdb [options] [--python|-P] script-file [script-arguments ...]
我们使用第二个用法,调试srs, gdb --args ./objs/srs -c conf/https.rtc.conf
, 输出如下信息:
下断点
- 断点到主函数,可以输入
b main
- 断点到指定函数,可以直接输入函数名字,比如
do_main
, 可以直接指定文件名,比如b do_main
但是这里,如果是重载的方法怎么办(重载是同名的)?
通过查找资料,同名的方法,可以将参数类型一起传递,或者直接输入方法名,gdb会列出多个可选的方法,然后我们选择对应的编号即可。
- 断点到指定文件的指定行?可以指定文件名加行号,比如
b srs_app_conn.cpp:230
. 指定相对路径的时候,遇到同名文件,会怎么办?这个遇到的时候再查.
- 如何查看所有断点?
i b
.
- 如何取消断点?
d 1
d 2-4
删除指定编号的断点,或者clear location
删除指定行的断点.
- 什么是观察断点?就是观察,当某一变量的值被读取了(rwatch)或者 被读取了+发生改变(awatch)时,触发断点.
-
条件断点?就是为局部变量设置条件,比如大于什么值或者等于什么值,用到了再说。
-
一次性删除所有断点?暂时不知道快捷方法,可以查询所有断点,然后按照编号,一次性删除
d n-m
开始调试
输入r
开始跑程序,遇到断点会自动停下来。
查看当前断点上下文
- 输入
l
可以查看断点行的上下5行共10行代码(默认)。
-
可以继续输入
l
查看后面的10行。 -
输入
l -
查看前10行. -
也可以指定行数,
l 10
, 查看第10行的前后5行。 -
也可以指定多少行到多少行,
l 10, 30
.
- 可以输入
help l
查看用法详情,其他信息也可以。显而易见,从手册中可以看到只能看到10行,不能一次性指定20行。
查看堆栈信息
输入bt
.
逐行调试
输入n
.
调试到下一个断点
输入c
.
打印变量值
输入p valuename
.
进入函数内调试(逐步调试)
输入s
. step.
Step program until it reaches a different source line.
提前结束函数内调试
输入fin
. finish.
Execute until selected stack frame returns.
Upon return, the value returned is printed and put in the value history.
查看堆栈中某一步中的信息
Select and print a stack frame.
With no argument, print the selected stack frame. (See also "info frame").
An argument specifies the frame to select.
It can be a stack frame number or the address of the frame.
With argument, nothing is printed if input is coming from
a command file or a user-defined command.
输入 f [num or addre]