AddressSanitizer 和 MemorySanitizer 是非常有用的工具,但它们需要对整个程序进行适当的检测。(至少,对于 AddressSanitizer 的 Clang 版本;请参阅MemorySanitizer 文档中的此处和AddressSanitizerClangVsGCC的“为全局变量使用私有别名”部分。)
如果按其原意的话,这意味着所有库依赖项都需要使用适当的编译器标志来构建以启用 ASan 或 MSan。对于需要各种第三方依赖项的典型 Linux 应用程序,执行此操作的实用方法是什么?Sanitizers 显然是一个谷歌项目,我的印象是谷歌代码大多只是使用他们自己的 monorepo 和他们自己的构建工具,但这可能超出了普通开发人员的能力范围。有没有一种简单的方法可以在不投资大量额外基础设施或构建脚本的情况下使用 Sanitizers 构建库?