文档目录

调试与 Sanitizer

目标:用自动化工具捕获 C++ 常见的内存错误和未定义行为。

  • 8.1 GDB / LLDB 高效调试

    • reverse-continue 逆向执行调试。
    • 条件断点、观察点(watch)、线程断点。
  • 8.2 AddressSanitizer(ASan)

    • -fsanitize=address:捕获堆/栈/全局变量的越界访问,释放后使用(Use-After-Free)。
    • 运行时开销约 2x,但能精确报告错误位置。
  • 8.3 UndefinedBehaviorSanitizer(UBSan)

    • -fsanitize=undefined:捕获整数溢出、移位越界、空指针解引用等未定义行为。
    • 建议在测试和调试构建中始终启用。
  • 8.4 ThreadSanitizer(TSan)

    • -fsanitize=thread:检测数据竞争(Data Race),无锁编程的核心验证工具。
    • 注意:TSan 需要所有代码(含第三方库)都重新编译才能准确检测。
  • 8.5 MemorySanitizer(MSan)

    • -fsanitize=memory:检测未初始化内存读取。
    • 注意:要求所有依赖库也用 MSan 编译,否则会大量误报。