Ubuntu 14.10 では、llvm-symbolizer
プログラムは としてインストールされ/usr/bin/llvm-symbolizer-3.5
ます。通常、アドレス サニタイザーはllvm-symbolizer
inという名前のバイナリを探します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
設定が機能しなくなったようです。環境で set を使用して ASAN インストルメント化プログラムを実行すると、ASANASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
がエラーを検出したときに次のエラーが生成されます。
==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 の強制バージョン タグがたまたまあるだけです。
Ubuntu はバージョン装飾のないバイナリをPATH
出荷しないため、ここでは調整は役に立たないことに注意してください。llvm-symbolizer