为什么 ASAN_SYMBOLIZER_PATH 不再适用于版本修饰的二进制文件
Why does ASAN_SYMBOLIZER_PATH no longer work with version adorned binaries
在 Ubuntu 14.10 上,llvm-symbolizer
程序安装为 /usr/bin/llvm-symbolizer-3.5
。通常,地址消毒器想要在 PATH
中找到一个名为 llvm-symbolizer
的二进制文件。但是,作为解决方法,可以显式设置 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_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
的 ASAN 检测程序在 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 的打包中,可以从路径 /usr/lib/llvm-3.x/bin
获得未经修饰的 llvm-symbolizer
二进制文件,因此 PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
诡计。我仍然认为这种变化是 compiler_rt.
的倒退
以下
sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
也适用于 llvm-symbolizer-4.0
(复制自@Eraden 评论)
当我不小心向 ASAN_SYMBOLIZER_PATH
环境变量中写入了一个不必要的换行符时,我遇到了这个错误。所以我在将它写入环境变量之前用 strip() 函数修复了它。
在 Ubuntu 14.10 上,llvm-symbolizer
程序安装为 /usr/bin/llvm-symbolizer-3.5
。通常,地址消毒器想要在 PATH
中找到一个名为 llvm-symbolizer
的二进制文件。但是,作为解决方法,可以显式设置 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_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
的 ASAN 检测程序在 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 的打包中,可以从路径 /usr/lib/llvm-3.x/bin
获得未经修饰的 llvm-symbolizer
二进制文件,因此 PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
诡计。我仍然认为这种变化是 compiler_rt.
以下
sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
也适用于 llvm-symbolizer-4.0
(复制自@Eraden 评论)
当我不小心向 ASAN_SYMBOLIZER_PATH
环境变量中写入了一个不必要的换行符时,我遇到了这个错误。所以我在将它写入环境变量之前用 strip() 函数修复了它。