GDB(GNU Debugger)是一款强大的调试工具,主要用于调试 C、C++ 和其他编程语言编写的程序。以下是 GDB 的使用方法:

一、启动 GDB

  1. 编译程序时加上调试信息

    • 在编译程序时,使用 -g 选项可以让编译器生成调试信息,以便 GDB 能够更好地进行调试。例如,对于 C 程序,可以使用以下命令进行编译:gcc -g program.c -o program。对于 C++ 程序,可以使用:g++ -g program.cpp -o program
  2. 启动 GDB

    • 启动 GDB 并加载要调试的程序。在命令行中输入 gdb program,其中 program 是要调试的程序的名称。

二、基本命令

  1. run(或 r

    • 运行程序。在 GDB 中输入 run 命令后,程序将开始执行。如果程序需要命令行参数,可以在 run 命令后面加上参数,例如:run arg1 arg2
  2. break(或 b

    • 设置断点。可以在程序的特定行号、函数名或地址处设置断点。例如,要在第 10 行设置断点,可以输入 break 10。要在名为 main 的函数处设置断点,可以输入 break main
  3. next(或 n

    • 执行下一行代码,但不进入函数内部。
  4. step(或 s

    • 执行下一行代码,如果是函数调用,则进入函数内部。
  5. continue(或 c

    • 继续执行程序,直到遇到下一个断点或程序结束。
  6. print(或 p

    • 打印变量的值。例如,要打印变量 x 的值,可以输入 print x
  7. backtrace(或 bt

    • 打印调用栈信息,显示当前程序的执行路径。
  8. quit(或 q

    • 退出 GDB。

三、查看变量和内存

  1. info locals

    • 显示当前函数的局部变量及其值。
  2. info args

    • 显示当前函数的参数及其值。
  3. x /<format> <address>

    • 检查内存地址处的值。<format> 可以是不同的格式说明符,例如 x/d 表示以十进制格式显示整数,x/s 表示以字符串格式显示内存内容。

四、条件断点

可以设置条件断点,只有当满足特定条件时,断点才会生效。例如,要在变量 x 等于 10 时才中断程序,可以输入 break 10 if x == 10

五、多线程调试

  1. info threads

    • 显示当前程序中的所有线程。
  2. thread <thread-id>

    • 切换到指定的线程进行调试。

六、远程调试

可以使用 GDB 进行远程调试,例如调试在另一台机器上运行的程序。这通常需要在目标机器上运行一个调试服务器,并在本地使用 GDB 连接到该服务器。