C++ 运行时检测工具



下面列出推荐使用的运行时检测工具,它们实用、可移植、易于使用,并且适用于多种发行版。

其他检测工具(例如 integer、memory、HWASan)未被列入,因为它们可能不够实用, 或者其实现在不同发行版 / 编译器等环境下可能不受支持,或给出不同的结果。

address: ASan — AddressSanitizer(-fsanitize=address)

用途: 在运行时检测内存安全缺陷。

典型用途:“快速找出导致崩溃 / 内存损坏的问题。”

典型检测结果

工作原理(概念层面)

注意事项


thread: TSan — ThreadSanitizer(-fsanitize=thread)

检测数据竞争及其他并发问题:

典型用途:“验证线程安全性。” 注意:通常使用独立于 ASan 的构建运行。

用途: 检测数据竞争及某些其他并发缺陷。

典型检测结果

工作原理

注意事项


undefined UBSan — UndefinedBehaviorSanitizer(-fsanitize=undefined 加上子检查项)

检测 C/C++ 中的未定义行为:

典型用途:“捕获可能不会导致崩溃但确实有错的未定义行为。”

用途: 在运行时检测未定义行为(违反语言 / ABI 规则的行为)。

典型检测结果(示例)

工作原理

注意事项


leak LSan — LeakSanitizer(-fsanitize=leak 或 ASan 的泄漏检测)

检测内存泄漏(程序结束时已不可达且未释放的已分配内存)。

典型用途:“防止长时间运行的服务 / 测试悄无声息地泄漏内存。” 在 Linux 上通常作为 ASan 的一部分使用。

用途: 检测内存泄漏(已分配但在程序结束时不可达的对象)。

典型检测结果

工作原理

注意事项