文档目录
调试与 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 编译,否则会大量误报。