Loading

gdb调试器

GDB(GNU Debugger)是一个强大的开源调试工具,用于调试 C、C++、Fortran 等语言编写的程序。以下为你详细介绍 GDB 调试的基本步骤和常用命令。

准备工作#

在使用 GDB 调试程序之前,需要确保在编译程序时加上 -g 选项,这样编译器会在生成的可执行文件中包含调试信息。例如:

gcc -g -o program program.c

这里将 program.c 源文件编译成可执行文件 program,并添加了调试信息。

启动 GDB#

在终端中输入以下命令启动 GDB 并加载要调试的可执行文件:

gdb program

基本调试流程和常用命令#

1. 运行程序

  • run(简写 r:开始执行被调试的程序。例如:
(gdb) r

若程序需要命令行参数,可以在 run 后面加上参数,如 (gdb) r arg1 arg2

2. 设置断点

断点是程序执行过程中的特定位置,当程序执行到断点处时会暂停,方便你查看程序的状态。

  • break <行号>:在指定行号处设置断点。例如,在第 10 行设置断点:
(gdb) break 10
  • break <函数名>:在指定函数的入口处设置断点。例如,在 main 函数处设置断点:
(gdb) break main

3. 查看断点信息

  • info breakpoints(简写 info b:查看当前设置的所有断点信息,包括断点编号、位置、是否启用等。
(gdb) info b

4. 继续执行程序

  • continue(简写 c:从当前暂停位置继续执行程序,直到遇到下一个断点或程序结束。
(gdb) c

5. 单步执行

  • next(简写 n:单步执行下一行代码,如果遇到函数调用,会将函数调用作为一步执行过去。
(gdb) n
  • step(简写 s:单步执行下一行代码,如果遇到函数调用,会进入函数内部继续单步调试。
(gdb) s

6. 查看变量值

  • print <变量名>:打印指定变量的值。例如,查看变量 x 的值:
(gdb) print x

7. 查看调用栈

  • backtrace(简写 bt:查看当前的函数调用栈,显示函数调用的层次关系和调用位置。
(gdb) bt

8. 删除断点

  • delete <断点编号>:删除指定编号的断点。例如,删除编号为 1 的断点:
(gdb) delete 1

9. 退出 GDB

  • quit(简写 q:退出 GDB 调试环境。
(gdb) q

示例#

以下是一个简单的 C 语言程序 test.c

#include <stdio.h>

int add(int a, int b) {
    int result = a + b;
    return result;
}

int main() {
    int x = 3;
    int y = 5;
    int sum = add(x, y);
    printf("The sum is: %d\n", sum);
    return 0;
}

编译并使用 GDB 调试的步骤如下:

  1. 编译程序并添加调试信息:
gcc -g -o test test.c
  1. 启动 GDB 并加载可执行文件:
gdb test
  1. add 函数处设置断点:
(gdb) break add
  1. 运行程序:
(gdb) r
  1. 程序会在 add 函数入口处暂停,此时可以使用 print 命令查看变量的值,使用 nextstep 命令单步执行代码。
  2. 调试完成后,使用 quit 命令退出 GDB。

通过以上步骤和命令,你可以使用 GDB 对程序进行有效的调试,找出程序中的错误和问题。

作者:cloud-2-jane

出处:https://www.cnblogs.com/cloud-2-jane/p/18765445

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   一只大学生  阅读(49)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示