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 调试的步骤如下:
- 编译程序并添加调试信息:
gcc -g -o test test.c
- 启动 GDB 并加载可执行文件:
gdb test
- 在
add函数处设置断点:
(gdb) break add
- 运行程序:
(gdb) r
- 程序会在
add函数入口处暂停,此时可以使用print命令查看变量的值,使用next或step命令单步执行代码。 - 调试完成后,使用
quit命令退出 GDB。
通过以上步骤和命令,你可以使用 GDB 对程序进行有效的调试,找出程序中的错误和问题。

浙公网安备 33010602011771号