在 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
set 的 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
版本修饰的二进制文件。