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 对程序进行有效的调试,找出程序中的错误和问题。
作者:cloud-2-jane
出处:https://www.cnblogs.com/cloud-2-jane/p/18765445
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步