Tengo algunas bibliotecas compiladas en x86 Linux y quiero determinar rápidamente si se compilaron con símbolos de depuración.
c
debugging
gdb
debug-symbols
Dan Hook
fuente
fuente

obdjump -W libyreadelf -w lib. El último es más configurable: consulte la página de manual de readelf (1).objdump -gno me da nada para una prueba simple. o compilado con y sing, lo que lo hace efectivamente inútil. Ubuntu 12.04, gcc 4.6.3, GNU objdump 2.22.nm -aparece ser más útil.El comando sugerido
siempre me da el mismo resultado al menos en Ubuntu / Linaro 4.5.2:
no importa si el archivo / biblioteca compartida se creó con o sin
-gopciónLo que realmente me ayudó a determinar si
-gse usó es la herramienta readelf :o
Esto imprimirá un conjunto de líneas que consta de nombre de archivo de origen, número de línea y dirección si dicha información de depuración se incluye en la biblioteca ; de lo contrario, no imprimirá nada .
Puede pasar cualquier valor que considere necesario para la
--debug-dumpopción en lugar dedecodedline.fuente
Lo que ayudó es:
Se imprime cuando no se encuentran los símbolos de depuración:
O cuando se encuentra:
Ninguna de las respuestas anteriores me dio resultados significativos: las bibliotecas sin símbolos de depuración estaban dando muchos resultados, etc.
fuente
nm -a <lib>imprimirá todos los símbolos de la biblioteca, incluidos los de depuración.Entonces puede comparar las salidas de
nm <lib>ynm -a <lib>, si difieren, su lib contiene algunos símbolos de depuración.fuente
nm -atiene un aliasnm --debug-symsque se explica por sí mismo :-).diff <(nm <lib>) <(nm -a <lib>)para obtener una diferencia fácilEn OSX puede usar
dsymutil -sydwarfdump.Al usar
dsymutil -s <lib_file> | more, verá las rutas de los archivos de origen en los archivos que tienen símbolos de depuración, pero solo los nombres de las funciones.fuente
dsymutil -s,? ¿La existencia de la salida significa que se construyó con símbolos de depuración o debería ser grepped?Puede usar objdump para esto.
EDITAR: Desde la página de manual:
fuente
Las respuestas que sugieren el uso de
objdump --debuggingoreadelf --debug-dump=...no funcionan en el caso de que la información de depuración se almacene en un archivo separado del binario, es decir, el binario contiene una sección de enlace de depuración . Quizás se podría llamar a eso un errorreadelf.El siguiente código debería manejar esto correctamente:
Consulte Archivos de depuración separados en el manual de GDB para obtener más información.
fuente