wie setzt breakpoint auf die Funktion in einer freigegebenen Bibliothek, die nicht geladen wurden, in der gdb
Habe ich eine shared-library libtest.so
die geladen wird, in der das main-Programm mit dlopen
. Funktion test()
befinden sich in libtest.so
und wird in main aufgerufen werden, um das Programm durch dlsym
. Gibt es eine Möglichkeit, könnte ich einen Haltepunkt auf test
?
Bitte beachten Sie, dass das Haupt-programm wurde nicht verknüpft mit libtest.so
während der Verknüpfung die Zeit. Ansonsten , ich sollte in der Lage sein, die Pause, obwohl es eine anhängige Klage. In meinem Fall, wenn ich b test
gdb sagt mir Function "test" not defined
.
- Könnten Sie einen Haltepunkt auf
test
nach dem ladenlibtest.so
mitdlopen
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich gdb sollte Ihnen sagen, dass es in der Lage, zu beheben, wird das symbol in die Zukunft, wenn neue Bibliotheken geladen sind:
Und später einmal die .also-Objekt geladen ist, lösen Sie den Haltepunkt, z.B.:
Tatsächlich, diese Methode funktioniert nicht immer.
Angenommen ich habe mehrere shared-libraries, von denen jeweils eine Funktion namens "Init". Wenn ich geladen haben, eine andere Bibliothek und dann "b " Init" wird der Haltepunkt auf die falsche Instanz der Funktion "Init". Also muss ich angeben, den Haltepunkt:
(gdb) b object5.c:66
Keine source-Datei mit dem Namen object5.c.
Ein anderer Weg ist, um anzugeben, das mit dem Namen und der Funktion, z.B.:
Dieser sollte eindeutig sein. Vielleicht möchten Sie auch, um den Pfad zu den source-code (wie bereits vorgeschlagen) von:
Zitat von https://sourceware.org/gdb/onlinedocs/gdb/Set-Breaks.html
vielleicht kann man mit "set directory the_location_of_object5.c_file", um es zu beheben.