Ich habe einige kompilierte Bibliotheken unter x86 Linux und möchte schnell feststellen, ob sie mit Debugging-Symbolen kompiliert wurden.
c
debugging
gdb
debug-symbols
Dan Hook
quelle
quelle
obdjump -W lib
undreadelf -w lib
. Letzteres ist konfigurierbarer - siehe Readelf (1) Manpage.objdump -g
gibt mir nichts für einen einfachen test.o mit und ohne kompiliertg
, was es praktisch nutzlos macht. Ubuntu 12.04, gcc 4.6.3, GNU objdump 2.22.nm -a
scheint nützlicher zu sein.Der vorgeschlagene Befehl
gibt mir immer das gleiche Ergebnis zumindest unter Ubuntu / Linaro 4.5.2:
egal ob das Archiv / die gemeinsam genutzte Bibliothek mit oder ohne
-g
Option erstellt wurdeWas mir wirklich geholfen hat festzustellen, ob
-g
es verwendet wurde, ist das Readelf- Tool:oder
Dies druckt eine Reihe von Zeilen aus Quellendateiname, Zeilennummer und Adresse aus, wenn solche Debug-Informationen in der Bibliothek enthalten sind , andernfalls wird nichts gedruckt .
Sie können den Wert übergeben, den Sie für die
--debug-dump
Option anstelle von erforderlich findendecodedline
.quelle
Was geholfen hat ist:
Es wird gedruckt, wenn Debug-Symbole nicht gefunden werden:
Oder wenn gefunden:
Keine der früheren Antworten lieferte für mich aussagekräftige Ergebnisse: Bibliotheken ohne Debug-Symbole lieferten viel Ausgabe usw.
quelle
nm -a <lib>
druckt alle Symbole aus der Bibliothek, einschließlich der Debug-Symbole.Sie können also die Ausgaben von
nm <lib>
und vergleichennm -a <lib>
- wenn sie sich unterscheiden, enthält Ihre Bibliothek einige Debug-Symbole.quelle
nm -a
hat einen Alias,nm --debug-syms
der selbsterklärend ist :-).diff <(nm <lib>) <(nm -a <lib>)
einen einfachen diff zu bekommenUnter OSX können Sie
dsymutil -s
und verwendendwarfdump
.Bei Verwendung von sehen
dsymutil -s <lib_file> | more
Sie Quelldateipfade in Dateien mit Debug-Symbolen, ansonsten jedoch nur die Funktionsnamen.quelle
dsymutil -s
? Bedeutet das Vorhandensein einer Ausgabe, dass sie mit Debug-Symbolen erstellt wurde, oder sollte sie erfasst werden?Sie können hierfür objdump verwenden .
EDIT: Von der Manpage:
quelle
Antworten, die darauf hinweisen, dass Debug-Informationen in einer von der Binärdatei getrennten Datei gespeichert werden
objdump --debugging
oderreadelf --debug-dump=...
nicht funktionieren, dh die Binärdatei enthält einen Debug-Link- Abschnitt. Vielleicht könnte man das einen Fehler nennenreadelf
.Der folgende Code sollte dies korrekt behandeln:
Weitere Informationen finden Sie unter Separate Debug-Dateien im GDB-Handbuch.
quelle