是否可以将 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 组合成一个版本?的主要内容,如果未能解决你的问题,请参考以下文章