2010-05-14 5 views
6

Sie können eine einzelne Symboldatei verweisen die mit Befehl gdb:Wie werden alle Symboldateien rekursiv aus dem angegebenen Pfad einschließlich der Unterverzeichnisse geladen?

symbol-file /usr/lib/debug/symbolfile.so 

Aber wie gdb sagen, alle Symbol-Dateien von bestimmten Pfad einschließlich Unterverzeichnisse zu laden?

+1

Auf welcher Plattform befinden Sie sich? Ich habe eine gute Antwort für Linux/ELF, aber ich bin zu faul, um es einzugeben, wenn das nicht Ihre Plattform ist. –

+0

Ja, ich habe eine Debian-Linux-Plattform. – user44556

+0

Mann, alle diese Antworten saugen ... Dito für [Wie laden Sie mehrere Symboldateien in gdb?] (Http://stackoverflow.com/q/20380204) – jww

Antwort

2

Auf einem Linux-System sollten Sie den GDB-Befehl nie zuerst symbol-file verwenden müssen.

Der Trick besteht darin, Ihre Binärdateien so zu präparieren, dass GDB die Symboldatei automatisch findet. Dies ist überraschend einfach zu tun. Detaillierte Anweisungen sind here.

+0

Nun, lassen Sie uns annehmen, dass ich selbst nichts kompilieren. Zum Beispiel nach apt-get install libc-dbg. Soll ich das installierte Debug-Paket verschieben, indem ich es vor dem Debuggen irgendwo kopiere? – user44556

+0

Das Ausführen von "apt-get install libc-dbg" sollte es ermöglichen, libc in GDB * ohne * zusätzliche Symboldateibefehle zu debuggen. Wenn nicht, dann haben Sie entweder eine defekte .gdbinit (am wahrscheinlichsten), eine defekte GDB oder eine defekte libc-dbg. Ich schlage vor, dass Sie Ihre Frage bearbeiten und so viele Details wie möglich bereitstellen, einschließlich der Pakete, die installiert sind und was sie enthalten, sowie der Ausgabe aus Ihrer aktuellen GDB-Sitzung mit "gdb -nx -ex 'set verbose on' ./a.out ". –

0

Verwenden Befehl folgender: Satz solib-search-Pfad Pfad

0

Die Lösung ist add-symbol-file. Zum Beispiel wird, wenn Symboldatei lib.out genannt:

add-symbol-file lib.out 0 

Dies ist besonders nützlich für eingebettetes System, in dem Anwendungsentwickler eine Bibliothek im ROM gespeichert ist. Der Debugger benötigt die Symboldatei, um den Stapel zu rekonstruieren, wenn die Ausführung mitten in einem Bibliotheksfunktionsaufruf stoppt. Dies funktioniert auch, wenn die Bibliothek auf einem separaten System erstellt wurde, auf das die Entwickler keinen Zugriff haben.

Verwandte Themen