2010-02-28 14 views
7

Escribí una transformación LLVM que básicamente reemplaza mallocs por tipo de mallocs guardados y algunas otras cosas.¿Por qué se pierden los símbolos de depuración en el proceso de compilación/enlace de LLVM?

Estoy usando clang (o llvm-gcc) para compilar un archivo c para obtener un archivo de código de bits (utilizando la opción -emit-llvm) que contiene información de depuración. Estos también contienen nombres de métodos, números de línea, etc.

Más tarde estoy usando opt para instrumentar este archivo de código de bits. El resultado es un archivo de código de bits instrumentado, que aún contiene todas las informaciones de depuración relevantes.

En un tercer y último paso, dado que necesitamos algunas librerías en tiempo de ejecución, vinculamos el código de bits con otros archivos de código de bits utilizando llvm-gcc para obtener un binario final.

Este binario no puedo depurar, ya que no contiene ninguna información de depuración, aunque todos los archivos de código de bits vinculados los contenían. Lo único que me puede decir gdb es en qué función estamos, pero no números de línea, etc. ...

Agradecería cualquier sugerencia.

+0

¿Está pasando -g a todos los pasos que lo aceptan? – bmargulies

+0

Especialmente el último paso llvm-gcc: De lo contrario, -g no se pasará al vinculador. –

+3

Sí, estoy agregando la opción -g a todos los pasos ... –

Respuesta

1

Según tengo entendido, está ejecutando optimizaciones (la herramienta opt optimiza el código y depura información también). Entonces, ¿puede ser la parte faltante que desea ver cuando la depuración es el resultado de la información de depuración optimizada?

P.S. Agregaría esto en el comentario, pero desafortunadamente no tengo 50 reputaciones que se necesitan para agregar un comentario.

Cuestiones relacionadas