Gdb und threads

Hallo,

irgendwie kann ich mit dem gdb keine Programme mit Threads debuggen.
Ich bekomme den Fehler

Program received signal SIG32, Real-time event 32.
0x08087abf in \_\_pthread\_sigsuspend ()

Ich versuche das ganze unter Fedora 1 (RedHat 9 Nachfolger).

Google nennt mir ne ganz eMenge, aber irgendwie werde ich nicht daraus schlau. Sind auch meine ersten Gehversuche unter Linux.

/Dirk

Hallo,

Google nennt mir ne ganz eMenge, aber irgendwie werde ich
nicht daraus schlau. Sind auch meine ersten Gehversuche unter
Linux.

Ja, dann solltest Du Dich gleich mit den Gepflogenheiten vertraut machen, dass man noch vor Google und Internet-Foren zunächst einmal einen Blick in die Dokumentation wirft. Das ist in Deinem Fall:

info gdb

Dort gibt es einen Extraabschnitt zu Threads „Debugging programms with multiple threads“

Gruß

Fritze

Weiss ich.
Nur hilft mir das bei der Lösung des Problems nicht weiter. Dort steht, falls du den Abschnitt mal anschaust, nur, wie man Programme mit mehreren Threads debuggen kann und auch wie man feststellt, ob der gdb threads überhaupt unterstützt.

Also ein „info threads“ liefert bei mir im gdb ein leeres Ergebnis. Was wohl darauf hindeutet, dass mein gdb threads unterstützt.

Die Fehlermeldung kommt übrigens beim Versuch, meinen ersten Thread zu starten.

/Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Konkreter: gdb und threads mit statischem linken
Kleine Verfeinerung:

Das Problem taucht nur auf, wenn ich statisch gegen pthread linke.

habe es mit folgendem probiert:

#include //Gimme thread stuff
#include 
#include 

void\* MyThreadFunc(void \*arg);

int main(){
 pthread\_t thread;

 pthread\_create(&thread, NULL, MyThreadFunc, NULL);

 pthread\_join(thread, NULL);

 std::cout

Wenn ich das ganze übersetze mit


    
    g++ -o test hello.cpp -lpthread



gibt es keine Probleme mit dem gdb.
Wenn ich aber übersetze mit


    
    g++ -static -o test hello.cpp -lpthread



kommt es zu folgendem:


    
    (gdb) run
    Starting program: .../test
    Hello World from inside a thread!
     
    Program received signal SIG32, Real-time event 32.
    0x0804aeef in \_\_pthread\_sigsuspend ()




Ich moechte aber statisch linken, weil das Programm noch andere libs benutzt, die ich ebenfalls nur als Entwicklungsversion vorliegen habe.

/Dirk

/Dirk

Hallo,

Also ein „info threads“ liefert bei mir im gdb ein leeres
Ergebnis. Was wohl darauf hindeutet, dass mein gdb threads
unterstützt.

Nein, das deutet darauf hin, dass Dein gdb keine threads unterstützt. Zumindest, wenn ich die Anleitung richtig interpretiere. Sonst sollte da nackt die Rückgabe „No Stack.“ oder ähnliches erscheinen. Sorry, mehr kann ich dazu auch nicht sagen. Ich hatte noch nie das Problem, meine Entwicklerwerkzeuge selbst kompilieren zu müssen :smile:

Gruß

Fritze

Nein, das deutet darauf hin, dass Dein gdb keine
threads unterstützt. Zumindest, wenn ich die Anleitung richtig
interpretiere. Sonst sollte da nackt die Rückgabe „No Stack.“
oder ähnliches erscheinen. Sorry, mehr kann ich dazu auch
nicht sagen. Ich hatte noch nie das Problem, meine
Entwicklerwerkzeuge selbst kompilieren zu müssen :smile:

Hab mich tatsächhlich verlesen.
Mist! Hab auch keine Lust, den gdb neu zu übersetzen.
Muss wohl mal danach sucen, ob ich das nicht noch irgendwo anders herbekomme.

Auf alle Fälle danke für die Hinweise.
/Dirk