it-swarm.com.de

Wie überprüfe ich, ob das Programm mit Debug-Symbolen kompiliert wurde?

Ich möchte Code in GIMP verfolgen und benötige daher GIMP mit aktivierten Debugsymbolen. Ich kann mich nicht erinnern, ob ich sie beim Kompilieren aktiviert habe. Wie kann man das überprüfen, ohne das Programm neu zu kompilieren?

64

Sie können file und objdump unter Linux verwenden. Insbesondere können Sie prüfen, ob in der Datei "gestrippt" oder "nicht gestrippt" steht und ob objdump --syms gibt alles Nützliche aus (für mich steht "keine Symbole" für einen regulären Build).

64

Beim Ausführen des objdump --syms Befehl, sehe ich viel mehr als " keine Symbole " in der Ausgabe (zumindest für Kernelobjekte ).

Um zu überprüfen, ob das Kernel-Objekt Debug-Informationen enthält, können Sie am Ende des Befehls objdump Folgendes hinzufügen: | grep debug.

Wenn diese Zeichenfolge gefunden wird, wissen Sie, dass das Kernelobjekt Debuginformationen enthält. Wenn nicht, dann ist es ein "sauberes" Kernelobjekt.

Beispiel eines Kernel-Moduls, das ich kompiliert habe ohne Debug-Informationen:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug

Beispiel für dasselbe Kernelmodul, das ich kompiliert habe mit Debug-Informationen:

[email protected]:~/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

Wie Sie sehen, gibt die erste Ausgabe nichts zurück, während die zweite Ausgabe Zeilen mit debug zurückgibt.

Hinweis: In meinem Fall hat der Befehl file mich in den Fällen beide debug und non-debug als "nicht entfernt" zurückgegeben. Der Unterschied in der Größe des Kernel-Objekts war jedoch bemerkenswert:

  • ca. 16k ohne Debug-Informationen
  • ca. 137k mit Debug-Informationen

Offensichtlich enthielt die letztere Version Debug-Informationen.

Meine Frage: Ist der Befehl file in solchen Fällen zuverlässig? Nach dem, was ich erlebt habe, verlasse ich mich auf die objdump --syms ... | grep debug Befehl.

42
GeertVc