linux gdb debuging

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, 输出如下信息:

下断点

  1. 断点到主函数,可以输入 b main

  1. 断点到指定函数,可以直接输入函数名字,比如do_main, 可以直接指定文件名,比如b do_main但是这里,如果是重载的方法怎么办(重载是同名的)?

通过查找资料,同名的方法,可以将参数类型一起传递,或者直接输入方法名,gdb会列出多个可选的方法,然后我们选择对应的编号即可。

  1. 断点到指定文件的指定行?可以指定文件名加行号,比如b srs_app_conn.cpp:230. 指定相对路径的时候,遇到同名文件,会怎么办?这个遇到的时候再查.

  1. 如何查看所有断点?i b.

  1. 如何取消断点? d 1 d 2-4 删除指定编号的断点,或者clear location删除指定行的断点.

  1. 什么是观察断点?就是观察,当某一变量的值被读取了(rwatch)或者 被读取了+发生改变(awatch)时,触发断点.

  1. 条件断点?就是为局部变量设置条件,比如大于什么值或者等于什么值,用到了再说。

  2. 一次性删除所有断点?暂时不知道快捷方法,可以查询所有断点,然后按照编号,一次性删除d n-m

开始调试

输入r开始跑程序,遇到断点会自动停下来。

查看当前断点上下文

  1. 输入l可以查看断点行的上下5行共10行代码(默认)。

  1. 可以继续输入l查看后面的10行。

  2. 输入l -查看前10行.

  3. 也可以指定行数,l 10, 查看第10行的前后5行。

  4. 也可以指定多少行到多少行,l 10, 30.

  1. 可以输入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]

posted @ 2024-09-30 13:23  yinchao_ws  阅读(3)  评论(0编辑  收藏  举报