是否可以将 AddressSanitizer 和 ThreadSanitizer 组合成一个版本?

Posted

技术标签:

【中文标题】是否可以将 AddressSanitizer 和 ThreadSanitizer 组合成一个版本?【英文标题】:Is it possible to combine AddressSanitizer and ThreadSanitizer into one build? 【发布时间】:2021-08-24 12:34:13 【问题描述】:

或者我必须使用单独的构建吗? -fsanitize 标志只允许地址或线程,但允许多个?

问候

【问题讨论】:

允许一些倍数。不是那两个倍数。 【参考方案1】:

不,不可能将 AddressSanitizer 和 ThreadSanitizer 组合到一个构建中(但其他组合是可能的)。您需要多个构建

-fsanitize=地址

启用快速内存​​错误检测器 AddressSanitizer。内存访问指令用于检测越界和 释放后使用错误。该选项启用 -fsanitize-address-use-after-scope。更多信息请见https://github.com/google/sanitizers/wiki/AddressSanitizer 细节。运行时行为可以使用 ASAN_OPTIONS 环境变量。当设置为 help=1 时,可用 选项在检测程序启动时显示。看 https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags 获取支持的选项列表。 该选项不能与 -fsanitize=thread 或 -fsanitize=hwaddress。请注意,目前唯一支持的目标 -fsanitize=hwaddress 是 AArch64。

-fsanitize=线程

启用 ThreadSanitizer,一种快速的数据竞争检测器。内存访问指令用于检测数据竞争错误。看 https://github.com/google/sanitizers/wiki#threadsanitizer 了解更多 细节。运行时行为可以使用 TSAN_OPTIONS 环境变量;看 https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags 为 支持的选项列表。 该选项不能与 -fsanitize=address, -fsanitize=leak.

请注意,在对具有非调用异常的无效内存地址进行操作时,经过清理的原子内置函数不会引发异常 (-fnon-call-exceptions)。

https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html

【讨论】:

以上是关于是否可以将 AddressSanitizer 和 ThreadSanitizer 组合成一个版本?的主要内容,如果未能解决你的问题,请参考以下文章

addressSanitizer:地址上的堆缓冲区溢出

AddressSanitizer 页面

AddressSanitizer 页面

gcc AddressSanitizer

Address Sanitizer - 我可以在 N 个缺陷后停止吗?

Xcode7 新特性 AddressSanitizer