118 votes

Comment savoir si une bibliothèque a été compilée avec -g?

J'ai des bibliothèques compilées sur Linux x86 et je veux déterminer rapidement si elles ont été compilées avec des symboles de débogage.

100voto

Alex InTechno Points 101

L'suggéré de commande

objdump --debugging libinspected.a
objdump --debugging libinspected.so

me donne toujours le même résultat au moins sur Ubuntu/Linaro 4.5.2:

libinspected.a:     file format elf64-x86-64
libinspected.so:     file format elf64-x86-64

peu importe si les archives/bibliothèque partagée a été construit avec ou sans -g option

Ce qui m'a vraiment aidé à déterminer si -g a été utilisé est readelf outil:

readelf --debug-dump=decodedline libinspected.so

ou

readelf --debug-dump=line libinspected.so

Cela permettra d'imprimer un ensemble de lignes composées de nom de fichier source, le numéro de ligne et l'adresse si de telles informations de débogage est inclus dans la bibliothèque, sinon ça va imprimer rien.

Vous pouvez passer n'importe quelle valeur que vous trouverez nécessaire pour --debug-dump option au lieu d' decodedline.

99voto

Matt McClellan Points 751

Si vous utilisez Linux, utilisez 'objdump --debugging'. Il devrait y avoir une entrée pour chaque fichier objet de la bibliothèque. Pour les fichiers objet sans symboles de débogage, vous verrez quelque chose comme:

 objdump --debugging libvoidincr.a
In archive libvoidincr.a:

voidincr.o:     file format elf64-x86-64
 

S'il y a des symboles de débogage, la sortie sera beaucoup plus détaillée.

31voto

qrdl Points 17813

nm -a <lib> imprimera tous les symboles de la bibliothèque, y compris ceux de débogage.

Ainsi, vous pouvez comparer les sorties de nm <lib> et nm -a <lib> - si elles diffèrent, votre bibliothèque contient des symboles de débogage.

18voto

glennr Points 458

Sous OSX, vous pouvez utiliser dsymutil -s et dwarfdump .

12voto

swegi Points 3074

Vous pouvez utiliser objdump pour cela.

EDIT: de la page de manuel:

 -W
--dwarf
Displays  the  contents of the DWARF debug sections in the file, if
any are present.
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X