2009-09-17 15 views
14

Ich versuche, einen Haltepunkt in Linux in gdb für ein Programm erstellen Threads. Ich möchte einen Haltepunkt bei der Erstellung von Threads setzen, aber leider pthread_create ist ein versioniertes Symbol, und ich kann seinen vollständigen Namen nicht erhalten.gdb Haltepunkt auf pthread_create

Wenn ich tippe:

catch thread_start 

ich

Catch of thread_start not yet implemented 

Wie ist der beste Weg, Thread-Erzeugung in GDB für diese Situation zu fangen?

Antwort

15

Versuchen Sie folgendes:

(gdb) b __pthread_create_2_1 

Oder bauen Sie Ihre eigenen GDB mit this patch angewendet.

Oder versuchen Sie die neueste Pre-Release GDBhere, die Sie "catch syscall clone"

2

OK zu tun, sollte es ermöglichen, werde ich zwei Antworten schreiben, weil ich nicht sicher bin, ob ich verstehe Ihre Frage.

Erstens: pthread_create ist in einer gemeinsam genutzten Bibliothek, und gdb kann damit umgehen. Wenn Sie nur "break pthread_create" sagen, sollte es "einfach funktionieren".

Sie sollten dies nicht wissen müssen, aber so, wie es funktionieren sollte, ist, dass gdb wird ein Symbol „pthread_create @ plt“, finden die ein Stummel, der den dynamischen Loader in führt, und wird schließlich ersetzt werden durch einen Sprung zur entsprechenden Shared-Library-Funktion. Wir werden dort einen Haltepunkt setzen, und gdb wird automatisch mit dem dynamischen Lader umgehen, bis schließlich die richtige Shared-Library-Funktion erreichen (und anhalten wird).

nun in dem Fall, dass es nicht für Sie lösen, auf meine zweite Antwort ...

15

OK, also für den Fall, dass ich nicht wirklich verstehen Sie, oder meine erste Antwort war nicht hilfreich, tun Sie dies:

(gdb) info func pthread_create 
All functions matching regular expression "pthread_create": 

Non-debugging symbols: 
0x080485e0 pthread_create 
0x080485e0 [email protected] 
0x00786590 __pthread_create_2_1 
0x00786590 [email protected]@GLIBC_2.1 
0x00786ee0 __pthread_create_2_0 
0x00786ee0 [email protected]_2.0 

Wählen Sie jetzt das Symbol, das Sie für das richtige halten, und setzen Sie einen Haltepunkt dort. Wählen Sie nicht diejenigen aus, die "@" enthalten, sondern eine der Ziffern und Unterstriche, z. B. 1__pthread_create_2_1.

Verwandte Themen