ubuntu clang ubuntu-16.04 address-sanitizer

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.