J'ai quelques bibliothèques compilées sous Linux x86 et je veux déterminer rapidement si elles ont été compilées avec des symboles de débogage.
c
debugging
gdb
debug-symbols
Dan Hook
la source
la source
obdjump -W lib
etreadelf -w lib
. Ce dernier est plus configurable - voir la page de manuel readelf (1).objdump -g
ne me donne rien pour un simple test.o compilé avec et sansg
, ce qui le rend effectivement inutile. Ubuntu 12.04, gcc 4.6.3, objdump GNU 2.22.nm -a
semble être plus utile.La commande suggérée
me donne toujours le même résultat au moins sur Ubuntu / Linaro 4.5.2:
peu importe si l'archive / la bibliothèque partagée a été construite avec ou sans
-g
optionCe qui m'a vraiment aidé à déterminer si a
-g
été utilisé est l' outil Readelf :ou
Cela imprimera un ensemble de lignes comprenant le nom du fichier source, le numéro de ligne et l'adresse si de telles informations de débogage sont incluses dans la bibliothèque , sinon cela n'imprimera rien .
Vous pouvez passer la valeur que vous jugerez nécessaire pour l'
--debug-dump
option au lieu dedecodedline
.la source
Ce qui a aidé est:
Il s'imprime lorsque les symboles de débogage ne sont pas trouvés:
Ou une fois trouvé:
Aucune des réponses précédentes ne donnait de résultats significatifs pour moi: les bibliothèques sans symboles de débogage donnaient beaucoup de résultats, etc.
la source
nm -a <lib>
affichera tous les symboles de la bibliothèque, y compris ceux de débogage.Vous pouvez donc comparer les sorties de
nm <lib>
etnm -a <lib>
- si elles diffèrent, votre bibliothèque contient des symboles de débogage.la source
nm -a
a un aliasnm --debug-syms
qui est explicite :-).diff <(nm <lib>) <(nm -a <lib>)
pour obtenir une différence facileSur OSX, vous pouvez utiliser
dsymutil -s
etdwarfdump
.En utilisant,
dsymutil -s <lib_file> | more
vous verrez les chemins des fichiers source dans les fichiers qui ont des symboles de débogage, mais uniquement les noms de fonction sinon.la source
dsymutil -s
? L'existence de la sortie signifie-t-elle qu'elle a été construite avec des symboles de débogage, ou doit-elle être greffée?Vous pouvez utiliser objdump pour cela.
EDIT: Depuis la page de manuel:
la source
Réponses suggérant l'utilisation
objdump --debugging
oureadelf --debug-dump=...
ne fonctionnant pas dans le cas où les informations de débogage sont stockées dans un fichier séparé du binaire, c'est-à-dire que le binaire contient une section de lien de débogage . On pourrait peut-être appeler cela un bugreadelf
.Le code suivant doit gérer cela correctement:
Voir Fichiers de débogage séparés dans le manuel GDB pour plus d'informations.
la source