GDB 调试指南:目录
面向初学者的 GDB 实战笔记。目标不是罗列命令手册,而是让你从“会敲命令”走到“看懂程序到底在干什么”。每章都尽量给出能直接照着敲的例子,并在关键的坑点上加了【新手提示】和【常见误区】。
目录
- GDB 快速上手:从编译到第一次调试
带调试信息编译、第一次启动 GDB、完整走一遍“下断点 → 运行 → 单步 → 看变量 → 继续”的最小闭环。 - 断点与观察点:精确控制程序在哪里停下
break 的六种用法、tbreak、rbreak、条件断点、观察点(watchpoint),以及“为什么我的断点没有触发”这类高频问题。 - 运行程序与参数传递
run/set args/环境变量/输入输出重定向,以及 run 和 continue 的区别。 - 单步调试与查看程序状态
next/step/nexti/stepi、finish/until,以及新手必须掌握但原笔记没覆盖的 print、backtrace、frame。 - 命令速查与常见误区
全部命令的缩写速查表、原笔记勘误汇总、以及后续可以继续学的方向。
怎么读这份笔记
- 如果你是第一次用 GDB:从第 1 章开始顺序读,第 1 章结束时你应该能独立完成一次最基础的调试。
- 如果你已经会基本操作,想查某个具体命令:直接跳第 5 章的速查表,或者用编辑器搜索命令名。
- 每章里标了【新手提示】的地方是容易被忽略但很有用的点,标了【常见误区】的地方是实践中真实会踩的坑。
示例程序约定
笔记里的例子统一假设有一个这样的 main.cpp(文件名、行号仅供参照,实际以你本地编译结果为准):
#include <cstdio>
#include <string>
#define MAX 9988
class FUNC {
public:
void testFun1() {
printf("FUNC FUNC FUNC\n");
}
};
void testFun(std::string str) {
printf("str: %s \n", str.c_str());
str = "vvvv";
printf("str: %s \n", str.c_str());
}
int testFun(int num) {
printf("num: %d\n", num);
int cnt = 190;
printf("cnt: %d\n", cnt);
return -2;
}
int main(int argc, char *argv[]) {
int a = 123;
char buf[128] = "456";
std::string str = "abc";
for (int i = 0; i < argc; i++) {
printf("argv[%d]: %s\n", i, argv[i]);
}
testFun(MAX);
testFun("xxxx");
FUNC f;
f.testFun1();
return 0;
}
编译命令统一用:
g++ main.cpp -o cmd -g

浙公网安备 33010602011771号