Saltar al contenido

¿Cómo obtengo números de línea en la salida de depuración con -fsanitize=address de clang?

Nuestro equipo de expertos pasados ciertos días de investigación y de recopilar de información, encontramos la respuesta, queremos que te sea de utilidad en tu trabajo.

Solución:

Si nos fijamos en el clang La documentación de AddressSanitizer dice:

Para hacer que AddressSanitizer simbolice su salida, debe configurar la variable de entorno ASAN_SYMBOLIZER_PATH para que apunte al binario llvm-symbolizer (o asegúrese de que llvm-symbolizer esté en su $PATH):

y muestra el siguiente ejemplo:

ASAN_SYMBOLIZER_PATH=/usr/local/bin/llvm-simbolizador ./a.out

Como señaló el OP, la ubicación de instalación puede variar, pero una vez que sepa dónde llvm-symbolizer se encuentra los pasos son los mismos.

¿Es addr2line lo que estás buscando?

 $ addr2line -e ./test 0x43e94f
 some/file.c:1234

A veces, usar un símbolo con un número de versión dará el error:

ERROR: External symbolizer path is set to '/usr/bin/llvm-symbolizer-5.0' which isn't a known symbolizer. Please set the path to the llvm-symbolizer binary or other known tool.

Esto se puede solucionar apuntando a un objeto sin adornos. llvm-symbolizer binario:

export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer

Luego ejecutó su ejecutable como lo haría normalmente.

Valoraciones y reseñas

Si te ha resultado de utilidad nuestro post, sería de mucha ayuda si lo compartieras con otros desarrolladores así contrubuyes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.