ubuntu - 为什么 ASAN_SYMBOLIZER_PATH 不再适用于版本修饰的二进制文件

标签 ubuntu clang ubuntu-16.04 address-sanitizer

在 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 将使地址 sanitizer 程序检测程序打印符号化错误。

在 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]做的伎俩。我仍然认为这种变化是 compiler_rt 的回归。

关于ubuntu - 为什么 ASAN_SYMBOLIZER_PATH 不再适用于版本修饰的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079761/

相关文章:

ubuntu - 尝试使用 RSA key 通过 SSH 连接到 EC2,获取 : Incorrect RSA1 identifier. .. 权限被拒绝(公钥)

c - 如何验证 void 指针 (void *) 是否是两种数据类型之一?

node.js - crypto.privateDecrypt 适用于 Windows 但不适用于 ubuntu

ubuntu-16.04 - 在Ubuntu 16.0上安装Wildfly 10.0.0无法配置init.d文件

audio - 关于在ubuntu中安装Gsreamer 1.8.0

python - Ubuntu下编译Cx-Freeze

ubuntu - 终端在 `npm start` 之后不显示输出

mysql - Docker - orchardup/mysql 容器无法在 Ubuntu 14.04 上启动

MacOS安装LLVM

c++ - 防止 clang-format 将多行 if 语句折叠成单行