GDB 调试指南:目录

面向初学者的 GDB 实战笔记。目标不是罗列命令手册,而是让你从“会敲命令”走到“看懂程序到底在干什么”。每章都尽量给出能直接照着敲的例子,并在关键的坑点上加了【新手提示】和【常见误区】。

目录

  1. GDB 快速上手:从编译到第一次调试
    带调试信息编译、第一次启动 GDB、完整走一遍“下断点 → 运行 → 单步 → 看变量 → 继续”的最小闭环。
  2. 断点与观察点:精确控制程序在哪里停下
    break 的六种用法、tbreak、rbreak、条件断点、观察点(watchpoint),以及“为什么我的断点没有触发”这类高频问题。
  3. 运行程序与参数传递
    run/set args/环境变量/输入输出重定向,以及 run 和 continue 的区别。
  4. 单步调试与查看程序状态
    next/step/nexti/stepi、finish/until,以及新手必须掌握但原笔记没覆盖的 print、backtrace、frame。
  5. 命令速查与常见误区
    全部命令的缩写速查表、原笔记勘误汇总、以及后续可以继续学的方向。

怎么读这份笔记

  • 如果你是第一次用 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
posted @ 2026-10-10 08:25  BlackSnow  阅读(5)  评论(0)    收藏  举报