valgrind,gcc 6.2.0和“-fsanitize = address”

时间:2017-02-06 23:22:41

标签: gcc valgrind address-sanitizer

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

“ASan运行时不会出现在初始库列表中”

我对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)

任何提示?

1 个答案:

答案 0 :(得分:3)

您无法在Valgrind下运行已清理的代码。即使你遇到了预装libasan的问题,你也会遇到相互冲突的地址空间要求(即启动时Valgrind会保留内存区域,这也是Asan影子内存所需要的),这无法解决因为这两个地址都是在Valgrind和libasan中进行硬编码的。 Asan和Tsan或Asan和Msan也存在类似的问题(即它们不能同时启用)。它不太可能被修复,因为消毒剂高度专业化以实现其令人印象深刻的性能数字。