目录

Linux中Gdb调试工具常用指令大全

Linux中Gdb调试工具常用指令大全

1.gdb的安装

如果你是root用户直接用指令 :yum install gdb ;如果你是普通用户用指令:sudo yum install gdb;

2.gdb调试前可以对你的makefile文件进行编写:

下面展示为11.c文件编写的makefile文件:


code-debug:11.c
        gcc -g 11.c -o code-debug 

.PHONY:clean

clean:
        rm -f code-debug

3.开始调试:

当你的makefile编写完成后,你执行了make指令后,生成了可执行程序code-debug;你输入指令: gdb code-debug

https://i-blog.csdnimg.cn/direct/1a448478525441138c6be12cb7b603e8.png

出现这个界面说明你进入gdb成功!

接下来是一些常见的指令:

启动与退出

  • gdb <program> :启动 Gdb 并加载指定的可执行文件。例如 gdb main ,用于调试名为 main 的可执行程序。
  • quitq :退出 Gdb 调试环境。

程序执行控制

  • runr :启动程序的执行,可带参数,如 run arg1 arg2 ,表示使用参数 arg1arg2 运行程序。
  • continuec :从当前断点处继续执行程序,直到遇到下一个断点或程序结束。
  • nextn :单步执行程序,遇到函数调用时,不会进入函数内部,直接执行函数调用语句的下一行。
  • steps :单步执行程序,若当前行是函数调用,则会进入函数内部继续单步执行。 https://i-blog.csdnimg.cn/direct/f24fd5f7dc934c16b3c8d5a2d0011d89.png
  • finish :继续执行当前函数,直到函数返回,并显示返回值。
  • until :不带参数时,执行直到当前函数返回;带参数(如行号或地址)时,程序继续执行直到到达指定位置。 https://i-blog.csdnimg.cn/direct/d881d8fe762b4cb7b2b76f2d824a9f13.png

断点操作

  • break <location>b <location> :在指定位置设置断点,位置可以是行号(如 b 10 在第 10 行设置断点)、函数名(如 b mainmain 函数入口设置断点)或文件名 + 行号(如 b main.c:20main.c 的第 20 行设置断点)。

  • tbreak <location> :设置临时断点,该断点在被命中一次后自动删除。

  • info breakpointsinfo b :显示当前设置的所有断点的信息,包括断点编号、位置、是否启用等。

  • delete <breakpoint_number> :删除指定编号的断点,如 delete 1 删除编号为 1 的断点。

  • disable <breakpoint_number> :禁用指定编号的断点,使其暂时不起作用,但断点信息仍保留。 https://i-blog.csdnimg.cn/direct/5b873293186546fbbd557db3a60043aa.png

  • enable <breakpoint_number> :启用之前被禁用的指定编号的断点。

查看与打印

  • listl :显示当前执行位置附近的源代码,默认每次显示 10 行。也可指定行号(如 l 50 从第 50 行开始显示)或函数名(如 l main 显示 main 函数的代码)来显示特定内容。 https://i-blog.csdnimg.cn/direct/f8278d179a5c40c7a6e7b1fbccbf4ec1.png

  • print <expression>p <expression> :打印指定表达式的值,如 p x 打印变量 x 的值, p a + b 打印 a + b 的计算结果。

  • display <expression> :每次程序停止时自动显示指定表达式的值,便于监控变量变化,如 display i 每次程序暂停时都会显示变量 i 的值。 https://i-blog.csdnimg.cn/direct/bb8801bfc42a486eb115a1d1b1fb299c.png

  • undisplay <display_number> :删除指定编号的自动显示设置,编号可通过 info display 查看。

  • backtracebt :显当前的函数调用栈信息,帮了解程序的执行路径和各函数间的调用关系。 https://i-blog.csdnimg.cn/direct/462bfd2298e34a74a1c408ec670d6a72.png

  • info locals :查看当前作用域内的局部变量及其值。

  • whatis <variable> :显示变量的类型。

  • ptype <variable> :显示变量详细的类型信息,对于结构体、类等复杂类型会展示其成员信息 。

观察点操作

  • watch <expression> :设置观察点,当指定的表达式的值发生变化时,程序暂停执行。
  • rwatch <expression> :设置只读观察点,当程序读取指定表达式的值时,程序暂停执行。
  • awatch <expression> :设置读写观察点,当程序读取或写入指定表达式的值时,程序暂停执行。

其他常用指令

  • set <variable>=<value> :设置变量的值,如 set n = 10 将变量 n 的值设置为 10。 https://i-blog.csdnimg.cn/direct/f11fa316a5594d4d8ad819c476706c34.png

  • return :强制从当前函数返回,可带返回值,如 return 5 使当前函数直接返回 5。

  • shell <command> :在不离开 Gdb 的情况下,执行 Linux shell 命令,如 shell ls 可列出当前目录下的文件和目录。

  • help <command> :查看指定 Gdb 命令的帮助信息,若不指定具体命令,会显示 Gdb 的总体帮助信息和命令分类。

Linux系统下调试的时候其实是有一种历史机制的,所以它再调试过程中可以进行直接回车接着进行!