web-dev-qa-db-fra.com

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

Je voudrais 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?

64
Lukasz Czerwinski

Vous pouvez utiliser file et objdump sous Linux. En particulier, vous pouvez vérifier si le fichier indique "supprimé" ou "non supprimé", et si objdump --syms renvoie tout ce qui est utile (pour moi, il dit "pas de symboles" pour une construction régulière).

64
Matthew Flaschen

Lors de l'exécution de objdump --syms commande, je vois bien plus que " pas de symboles " 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 la commande objdump: | grep debug.

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

Exemple d'un module de noyau que j'ai compilé sans 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 du même module de noyau que j'ai compilé avec 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 contenant debug.

Remarque: dans mon cas, la commande file m'a renvoyé "non supprimé" dans both débogage et non débogage. Cependant, la différence de taille de l'objet noyau était remarquable:

  • environ. 16k sans informations de débogage
  • environ. 137k avec des informations de débogage

De toute évidence, cette dernière version contenait des informations de débogage à l'intérieur.

Ma question: la commande file est-elle fiable dans de tels cas? D'après ce que j'ai vécu, je compte sur le objdump --syms ... | grep debug commande.

42
GeertVc