在Ubuntu 14.10上,llvm-symbolizer
程序安装为/usr/bin/llvm-symbolizer-3.5
。通常,地址清理器要在llvm-symbolizer
中找到一个名为PATH
的二进制文件。但是,作为一种解决方法,可以显式设置ASAN_SYMBOLIZER_PATH
。因此,在环境中设置ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
将使地址消毒程序检测程序打印符号化错误。
在Ubuntu 16.04上,再次安装了llvm-symbolizer
程序,其版本后缀为/usr/bin/llvm-symbolizer-3.8
。但是,ASAN_SYMBOLIZER_PATH
设置似乎不再起作用。当ASAN检测到错误时,在环境中运行设置了ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
的ASAN检测程序会产生以下错误:
==18718==ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-3.8' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.
有谁知道为什么这种行为改变了,或者如何恢复旧的行为?这似乎是不合理的限制。我已将ASAN指向的符号程序绝对是已知的符号程序,它恰好在最后带有Ubuntu强制版本标记。
请注意,调整
PATH
在这里无济于事,因为Ubuntu不会发布没有版本装饰的llvm-symbolizer
二进制文件。 最佳答案
事实证明,在Ubuntu的LLVM包装上,可以从路径llvm-symbolizer
获得未经修饰的/usr/lib/llvm-3.x/bin
二进制文件,因此PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
可以解决问题。我仍然认为,尽管此更改是对editor_rt的回归。
关于ubuntu - 为什么ASAN_SYMBOLIZER_PATH不再与版本修饰的二进制文件一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38079761/