Ich habe eine statische Bibliothek, die ich im Debug-Modus erstelle, aber wenn ich hineintrete, bekomme ich immer noch eine Disassemblierung. Ich möchte wissen, wie man nm oder ein anderes Werkzeug benutzt, um sicherzustellen, dass die Debug-Symbole nicht entfernt werden.Wie kann ich eine statische Bibliothek überprüfen, um zu sehen, ob die Debugsymbole exportiert werden?
Antwort
Herunterladen Dependencywalker für Ihr Betriebssystem
Es erkennt, wenn Ihre DLL Debug-Symbole hat. Wenn unter "Symbole" "Ungültig" angezeigt wird, bedeutet dies, dass Debug-Symbole entfernt wurden. Gültige Werte sind: PDB, CV, DBG usw.
Dependencywalker unterstützt nur dynamische Bibliotheken, nicht statische Bibliotheken. –
Sie können den Befehl file verwenden, der für viele Betriebssysteme verfügbar ist, einschließlich Windows über Cygwin.
Wenn es "nicht stripped" heißt, bedeutet das, dass es die Debug-Informationen vorhanden hat.
Als eine Randnotiz, für statische libs ar verwenden, um die .o
Dateien & zu extrahieren verwenden Sie file
auf ihnen direkt.
'Datei' ist für diesen Fall in Ordnung, obwohl es im allgemeinen Fall ist es möglich, eine nicht entfernte binäre ohne Debug-Informationen zu haben. – Nick
Sie können nm
's Option --debug-syms
verwenden, um auch Debuggersymbole (falls vorhanden) für das in eine Bibliothek gepackte Objekt aufzulisten (nm
).
Für Debugger-Symbole gibt die zweite Spalte N
an.
Beispiel (übernimmt das Objekt example.o in der Bibliothek zu sein)
nm --debug-syms libexample.a
Ausgabe (Auszug):
example.o:
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 N .debug_abbrev
0000000000000000 N .debug_aranges
0000000000000000 N .debug_info
0000000000000000 N .debug_line
0000000000000000 N .debug_loc
0000000000000000 N .debug_pubnames
0000000000000000 N .debug_str
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .rodata
0000000000000000 t .text
...
Mehr dazu bitte man nm
sehen.
Ab heute, 2015-09-24, und auf Mac, hat der 'Datei' Befehl nicht --debug-syms. Ich weiß, dass es einmal eine Weile her war. Also muss es geändert worden sein. (Die Trios, d. H. Nm, Otool und Dateien werden von Zeit zu Zeit ständig geändert.) Die Funktionalität ist jedoch immer noch vorhanden. ('Datei' Version: 5.04) -D Option: z.B. file -D myGreadLibrary.a D Debugging-Meldungen drucken. –
Sie können verwenden, um zu überprüfen, ob Ihre statische Bibliotheksgröße reduziert wurde. Die Größe der statischen Bibliothek ändert sich nicht, wenn sie keine Debugging-Symbole enthält.
Es ist unter Mac OS möglich, statische Bibliotheken zu überprüfen, die von Xcode generiert wurden.
Jede bestimmte OS? –
'Mann nm' könnte ein Anfang sein. –
Da Sie sicher sind, dass Sie Ihre statische Bibliothek mit Debug-Symbolen erstellen, glaube ich, dass Ihr Programm nicht mit der neuesten statischen Bibliothek verknüpft ist. Es wurde auf einem anderen Computer kompiliert/verlinkt oder Sie haben es nicht auf diesem Computer neu kompiliert/verlinkt. – ernesto