ubuntu - ¿Por qué ASAN_SYMBOLIZER_PATH ya no funciona con los binarios de versión adornada?
clang++ install ubuntu (2)
En Ubuntu 14.10, el programa llvm-symbolizer
se instala como /usr/bin/llvm-symbolizer-3.5
. Normalmente, el desinfectante de direcciones quiere encontrar un binario llamado llvm-symbolizer
en PATH
. Sin embargo, como solución alternativa, fue posible establecer explícitamente ASAN_SYMBOLIZER_PATH
. Por lo tanto, establecer ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5
en el entorno permitiría que un desinfectante de direcciones en el programa instrumentado imprima errores simbolizados.
En Ubuntu 16.04, el programa llvm-symbolizer
se instala nuevamente con un sufijo de versión, ahora como /usr/bin/llvm-symbolizer-3.8
. Sin embargo, la configuración ASAN_SYMBOLIZER_PATH
ya no parece funcionar. La ejecución de un programa instrumentado ASAN con ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8
configurado en el entorno genera el siguiente error cuando ASAN detecta un error:
==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.
¿Alguien sabe por qué cambió este comportamiento, o cómo restaurar el comportamiento anterior? Esto parece irrazonablemente restrictivo. El programa del simbolizador al que he señalado ASAN es definitivamente un simbolizador conocido, simplemente tiene una etiqueta de versión obligatoria de Ubuntu al final.
Tenga en cuenta que el ajuste de PATH
no ayuda aquí, ya que Ubuntu no llvm-symbolizer
un binario llvm-symbolizer
que viene sin un adorno de versión.
El seguimiento
sudo ln -s /usr/bin/llvm-symbolizer-3.8 /usr/bin/llvm-symbolizer
También funciona para llvm-symbolizer-4.0
(Copiado de @Eraden comentario)
Resulta que, en el paquete de LLVM de Ubuntu, se puede obtener el binario llvm-symbolizer
sin adornos de la ruta /usr/lib/llvm-3.x/bin
, por lo que PATH=/usr/lib/llvm-3.x/bin:$PATH [COMMAND]
hace el truco. Todavía pienso que este cambio es una regresión en compiler_rt.