2012-12-20 5 views
15

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?

+2

Jede bestimmte OS? –

+1

'Mann nm' könnte ein Anfang sein. –

+0

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

Antwort

0

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.

+5

Dependencywalker unterstützt nur dynamische Bibliotheken, nicht statische Bibliotheken. –

3

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.

+1

'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

18

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.

+0

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. –

0

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.

Linux and Unix strip command

Verwandte Themen