118 votes

Comment vérifier si le programme a été compilé avec des symboles de débogage ?

J'aimerais tracer du code dans GIMP et j'ai donc besoin de GIMP avec les symboles de débogage activés. Je ne me souviens pas si je les ai activés lors de la compilation. Comment vérifier cela sans recompiler le programme ?

124voto

Matthew Flaschen Points 131723

Vous pouvez utiliser file y objdump sur Linux. En particulier, vous pouvez regarder si le fichier indique "stripped" ou "not stripped". (sous mon Ubuntu 20.04.1 LTS si un exécutable est compilé avec -g ou ne montre pas not stripped avec file commandement. Mais celui qui a -g , montre with debug_info, en plus de cela), et si objdump --syms produit quelque chose d'utile (pour moi, cela dit "pas de symboles" pour une construction régulière).

13 votes

Dépouillé signifie sans symboles, non ?

30 votes

L'équivalent pour OS X est otool -Iv .

11 votes

Que rechercher dans la sortie de otool -Iv ?

79voto

GeertVc Points 306

Lorsque vous exécutez le objdump --syms je vois beaucoup plus que " aucun symbole "dans la sortie (au moins, pour objets du noyau ).

Pour vérifier s'il y a des informations de débogage à l'intérieur de l'objet noyau, vous pouvez ajouter ce qui suit à la fin de l'objet objdump commandement : | grep debug .

Si cette chaîne est trouvée, vous savez que l'objet du noyau contient des informations de débogage. Sinon, il s'agit d'un objet noyau "propre".

Exemple d'un module de noyau que j'ai compilé sans des informations de débogage :

geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug

Exemple de ce même module de noyau que j'ai compilé avec des informations de débogage :

geertvc@jimi:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug
00000000 l    d  .debug_frame   00000000 .debug_frame
00000000 l    d  .debug_info    00000000 .debug_info
00000000 l    d  .debug_abbrev  00000000 .debug_abbrev
00000000 l    d  .debug_loc     00000000 .debug_loc
00000000 l    d  .debug_aranges 00000000 .debug_aranges
00000000 l    d  .debug_ranges  00000000 .debug_ranges
00000000 l    d  .debug_line    00000000 .debug_line
00000000 l    d  .debug_str     00000000 .debug_str
00000010 l       .debug_frame   00000000 $d

Comme vous pouvez le voir, la première sortie ne renvoie rien, tandis que la deuxième sortie renvoie des lignes avec debug en elle.

Remarque : dans mon cas, le file m'a renvoyé "non dépouillé" dans les deux cas de débogage et de non-débogage. Cependant, la différence de taille de l'objet noyau était remarquable :

  • environ 16k sans information de débogage
  • environ 137k avec les informations de débogage

Il est clair que cette dernière version contenait des informations de débogage.

Ma question : est-ce que le file commande fiable dans de tels cas ? D'après mon expérience, je me fie à la commande objdump --syms ... | grep debug commandement.

0 votes

Moi aussi, j'ai eu le même problème avec file . Pour moi, objdump --syms sans le grep donne de nombreux résultats, même sur la version non déboguée, mais le bit grep permet d'appeler les symboles spécifiques réservés au débogage, ce qui fonctionne pour moi.

5 votes

+un pour lever l'ambiguïté de la sortie "fichier".

2 votes

Sur mon système Ubuntu 19, file dit "avec debug_info, non dépouillé" ou juste "dépouillé".

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