使用-fsanitize=memory
编译时,运行程序时会出现WARNING:尝试符号化代码,但未初始化外部符号化器!
。如何初始化外部符号化器?
使用-fsanitize=memory
编译时,运行程序时会出现WARNING:尝试符号化代码,但未初始化外部符号化器!
。如何初始化外部符号化器?
我通过使用MSAN_SYMBOLIZER_PATH=$(which llvm-symbolizer-3.4) ./a.out
解决了自己的问题。问题在于Ubuntu会添加版本号,但二进制文件并不知道。当使用内存消毒剂时,当然需要使用MSAN
而不是ASAN
。
./myprogram 2>&1 | /tmp/asan_symbolize.py | c++filt
/usr/bin
下,带有版本后缀(如llvm-symbolizer-4.0
),而Sanitizer工具在查找它们时没有版本后缀。LLVM还将其二进制文件安装到例如/usr/lib/llvm-4.0/bin
;位于/usr/bin
下的工具实际上只是符号链接。因此,一个简单的解决方案是在使用Sanitizer时将相应的/usr/lib/llvm-*/bin
目录添加到您的路径中。