Wie man gdb Symbole drucken in gemeinsamen Bibliotheken geladen mit dlopen?

Möchte ich eine debug-Prozess auf Linux 2.6 mit GDB. attach PID (wobei PID die Prozess-ID), print main, print sin, print gzopen und print dlopen arbeiten (d.h. Sie finden die entsprechenden Symbole). Aber print myfoo funktioniert nicht, wo myfoo ist eine Funktion geladen, die durch den Prozess von einem .so - Datei mit dlopen. Hier ist, was ich bekomme:

(gdb) print main
$3 = {int (int, char **)} 0x805ba90 <main>
(gdb) print sin
$4 = {<text variable, no debug info>} 0xb7701230 <sin>
(gdb) print gzopen
$5 = {<text variable, no debug info>} 0xb720df50 <gzopen>
(gdb) print dlopen
$6 = {<text variable, no debug info>} 0xb77248e0 <__dlopen_nocheck>
(gdb) print myfoo
No symbol "myfoo" in current context.

Wie bekomme ich den GDB zu finden myfoo?

Die Funktion myfoo ist, existiert tatsächlich, denn in dem Programm habe ich es geschafft, seine Adresse mit dlsym (nach dlopen), und ich es geschafft, es zu nennen. Erst danach befestigte ich den GDB an den Prozess.

Es stellte sich heraus, dass es ein mydir/mylib.so: No such file or directory Fehlermeldung gedruckt von der attach $PID Befehl von GDB. Offenbar GDB gestartet wurde in das falsche Verzeichnis. Weise die richtige cd vor Beginn der GDB das problem behoben, und print myfoo zu arbeiten begonnen.

Ich würde gerne, dies zu automatisieren: ich möchte GDB herausfinden, wo meine .so Dateien (geladen mit dlopen) sind. Eine Annäherung ich denken kann, ist die Prüfung /proc/$PID/maps (auf Linux), Suche nach möglichen Verzeichnisse, und das hinzufügen Sie alle auf den GDB-library search path", bevor GDB. Erweiterung LD_LIBRARY_PATH und dabei eine set solib-search-path /tmp/parent hat nicht funktioniert (ls -l /tmp/parent/mydir/myfoo.so funktioniert), GDB noch berichtet die No such file or directory. Wie kann ich feststellen, GDB, wo mydir/myfoo.so?

Meine andere Frage ist, wie bekomme ich die Liste der möglichen Verzeichnisse? Unter Linux /proc/$PID/maps Sie enthält-aber was ist mit anderen Betriebssystemen wie FreeBSD und Mac OS X?

  • Funktioniert gut für mich. Post code. Was flags sind Sie vorbei dlopen?
  • Hmm, Browsen durch die GDB-Fehlermeldungen beim anbringen habe ich festgestellt mylib.so: No such file or directory. Nachdem ich die richtige cd vor Beginn der GDB print myfoo zu arbeiten begonnen. Aber ich würde gerne automatisieren, dass (so cd ist nicht erforderlich). Ich habe erweiterte die Frage.
InformationsquelleAutor pts | 2010-12-08
Schreibe einen Kommentar