Warum würde gdb hängen?

8

Ich habe eine Anwendung, die ich debugge und ich versuche zu verstehen, wie gdb funktioniert und warum ich manchmal nicht in der Lage bin, die Anwendung zu durchlaufen. Das Problem, das ich erfahre, ist, dass gdb hängen bleibt und der Prozess, an den es angehängt ist, in einen nicht mehr existierenden Zustand übergeht, wenn ich durch das Programm gehe. Nach gdb hängt und ich muss es töten, um das Terminal zu befreien (ctrl-C funktioniert nicht, ich muss dies aus einem anderen Terminal-Fenster tun, indem Sie die Prozess-ID für diese gdb Sitzung und mit kill -9).

Ich nehme an, dass gdb hängt, weil es darauf wartet, dass die Anwendung bei der nächsten Anweisung stoppt, und irgendwie hat die Anwendung die Ausführung beendet, ohne dass gdb dies erkannt hat. Aber das ist nur Spekulation von meinem bisher beobachteten Verhalten. Meine Frage ist also, ob jemand diese Art von Verhalten schon einmal gesehen hat und / oder was die Ursache sein könnte. Ich denke, das könnte mir helfen, meine Debugging-Strategie zu verbessern.

Falls es darauf ankommt, verwende ich g ++ 4.4.3, gdb 7.1, läuft unter Ubuntu 10.04 x86_64.

    
Gabriel Southern 23.01.2012, 21:22
quelle

2 Antworten

4

Ich würde sagen, dass der debuggte Prozess nicht im Leerlauf laufen würde, wenn dies der Grund für den Absturz wäre. Jedes Mal, wenn GDB einen Schritt abgeschlossen hat, müssen alle Ausdrücke aktualisiert werden, die Sie drucken müssen. Es kann folgende Zeiger enthalten und so, und in einigen Fällen kann es dort fehlschlagen (obwohl ich nicht an ein echtes "Hängen" erinnere). In der Regel wird auch versucht, den Stack-Trace zu aktualisieren. Wenn der Stack-Trace beschädigt wurde und nicht mehr kohärent ist, könnte er in einer Endlosschleife gefangen sein. Das Anhängen von gdb an strace , um zu sehen, welche Art von Aktivität während des Hangs stattfindet, könnte ein guter Weg sein, einen Schritt weiter zu gehen, um das Problem herauszufinden.

(z. B. der Zugriff auf Quellen über ein nicht mehr funktionierendes NFS / SSHFS-Mount ist einer der häufigsten Gründe für das Hängenbleiben von gdb, hier: P)

    
PypeBros 24.01.2012, 08:55
quelle
1

Ich hatte ein ähnliches Problem und löste es, indem ich ein CONT -Signal an den zu debuggenden Prozess sendete.

    
Michaël Witrant 07.09.2014 14:24
quelle

Tags und Links