valgrind、gcc 6.2.0 和“-fsanitize=address”

valgrind, gcc 6.2.0 and "-fsanitize=address"

最近,在使用“-fsanitize=address”进行编译时,我得到了 运行 有 valgrind 的应用程序时的执行异常 即

"ASan runtime does not come first in initial library list"

我有点不知道 valgrind 到底做了什么。命令 'ldd file.exe' 交付

    linux-gate.so.1 =>  (0xb7755000)
    libasan.so.3 => /usr/lib/i386-linux-gnu/libasan.so.3 (0xb7199000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6fdf000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6fd8000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb6fcf000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6fb2000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6f5c000)
    /lib/ld-linux.so.2 (0x80092000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6f3e000)

有什么提示吗?

您将无法 运行 在 Valgrind 下净化代码。即使你解决了预加载 libasan 的问题,你也会 运行 陷入冲突的地址 space 要求(即在启动时 Valgrind 保留内存区域,这也是 Asan 影子内存所需要的)并且这可以'由于两个地址在 Valgrind 和 libasan 中都是 hard-coded,因此无法解决。 Asan 和 Tsan 或 Asan 和 Msan 也存在类似的问题(即它们不能同时启用)。它不太可能被修复,因为消毒剂是高度专业化的,以实现其令人印象深刻的性能数字。