GDB 简介与使用示例:程序调试从这里开始!
关于学习嵌入式来说,无疑是学的东西很多,记得东西很多,东西写在这里,主要让我自己能够重构问题,以及还有同行者的指点。
一、GDB 是什么?
在我们写程序的过程中,不可避免地会遇到程序崩溃、变量异常、逻辑错误这些情况。尤其对于社会工作者中从事技术辅助岗位的朋友或刚开始学习编程的小白来说,一段程序“运行错了但不知道哪里错”的时候,简直令人抓狂!
这时候,GDB(GNU Debugger) 就是你的“放大镜”和“侦探工具”!
GDB 是一个开源的调试器,可以帮助我们:
- 逐步执行程序
- 查看变量的值
- 设置断点
- 分析程序为何崩溃(如段错误)
通俗点说:GDB 可以“暂停”程序的运行,让你看到程序“脑子里在想什么”。
二、GDB 能干什么?核心功能介绍
功能 | 作用说明 |
---|---|
设置断点 | 在某一行或函数暂停程序运行 |
单步执行 | 一行一行地执行,查找逻辑错误 |
查看变量值 | 查看当前变量内容,是否符合预期 |
查看调用栈 | 查清当前执行位置是怎么走到这里的 |
修改变量 | 在调试时临时更改变量值,验证逻辑 |
分析崩溃信息 | 程序崩溃后追踪是哪一行出错了 |
三、GDB 的基本使用步骤(以 C 语言为例)
1. 准备一段 C 程序(例子很简单)
#include<stdio.h>int main(){ int a = 10;int b = 0;int c = a / b; // 除以 0 会导致崩溃printf("Result is: %d\n", c);return0;}
2. 编译时加上 -g
选项(生成调试信息)
gcc -g test.c -o test
3. 启动 GDB 调试
gdb ./test
进入 GDB 后,会看到提示符:
(gdb)
四、常用命令举例(小白上手无压力)
命令 | 说明 |
---|---|
run | 运行程序 |
break 行号/函数名 | 设置断点,如 break 5、break main |
next | 执行下一行(不进入函数内部) |
step | 进入函数内部逐步执行 |
print 变量名 | 查看变量的值 |
backtrace(简写:bt) | 打印调用栈信息(程序崩溃时使用) |
quit | 退出 GDB |
使用演示:查看程序崩溃原因
(gdb) run
输出:
Program received signal SIGFPE, Arithmetic exception.
这说明程序发生了“浮点异常”,也就是除以 0。
接着输入:
(gdb) backtrace
得到如下信息:
#0 main () attest.c:6
表示问题出现在第 6 行。
继续查看变量:
(gdb) print a
你会立刻明白:int c = a / b;
中的 b == 0
是罪魁祸首!