Monday, 5 June 2017

Gdb Anhängen Waitforexit


Ich habe einen Prozess, der von einem anderen Prozess genannt wird, der von einem anderen Prozess und so weiter ad Übelkeit aufgerufen wird. Sein ein Kindprozeß in einer langen Werkzeugkette. Dieser Prozess stürzt ab. Ich möchte diesen Prozess in gdb fangen, um zu verstehen, warum sein Absturz. Der einzige Weg, den ich mir vorstellen kann, ist: Starten Sie den ursprünglichen Elternprozess in der Kommandozeile. Umfrage ps - C ltname Prozess Ich möchte catchgt und bekommen die PID. Starten Sie gdb, an diese Prozesse PID. Das ist mühsam, aber normalerweise macht der Job. Das Problem ist, dass die aktuelle Ausfall sehr schnell läuft, und durch die Zeit, die ich die PID erfassen und starten gdb, hat es bereits den Ausfallpunkt übergeben. Ich möchte gdb starten und anstelle von: Ich würde gerne tun: Gibt es eine Möglichkeit, dies zu tun Ich benutze gdb 7.1 on linux Nicht genau das, was Sie erwarten, aber es könnte Ihnen beim Debugging helfen. Überprüft und druckt Speicherfehler bei allen Kindern des Prozesses, mit Stack-Trace und einige Details über den Fehler (zB bei doppelten, youd bekommen die Stack-Trace der ersten kostenlos). Außerdem könntest du den Crash-Prozess zu einem Core-Dump machen und diesen Post-mortem debuggen. Siehe diese Antwort für Details. detach Befehl Nachdem GDB von einem Prozess abgelöst wird, läuft der Prozess weiter, ohne dass ein Debugger daran angeschlossen ist. Sie können dann mit dem Anhängebefehl zurückschließen. Beachten Sie, dass Sie den Befehl trennen können, ist in all diesen Fällen gültig: Wenn Sie an einen Prozess mit dem Befehl attach angehängt haben Wenn Sie einen Prozess mit dem Befehl run begonnen haben Wenn Sie mit dem Zielbefehl an einen gdbserver angeschlossen haben Wenn Sie möchten, Beenden Sie den Debugging-Prozess, anstatt sich von ihm zu lösen, verwenden Sie den Befehl kill. Im folgenden Beispiel fügen wir GDB einem laufenden Linux-Prozess bei, lösen ihn ab und fügen wieder an: (gdb) attach 14199 Anhängen an den Prozess 14199 Lesen von Symbolen von hometestuser0.elf. erledigt. Lesen von Symbolen aus libi386-linux-gnulibc. so.6. Lesen von Symbolen aus usrlibdebuglibi386-linux-gnulibc-2.15.so. erledigt. erledigt. Loaded Symbole für libi386-linux-gnulibc. so.6 Lesen von Symbolen von libld-linux. so.2. Lesen von Symbolen aus usrlibdebuglibi386-linux-gnuld-2.15.so. erledigt. erledigt. Loaded Symbole für libld-linux. so.2 0xb771f424 in kernelvsyscall () (gdb) detach Abheben aus Programm: hometestuser0.elf, Prozess 14199 (gdb) anhängen 14199 Anhängen an Programm: hometestuser0.elf, Prozess 14199 Lesen von Symbolen von libi386-linux - Gulkanin. Lesen von Symbolen aus usrlibdebuglibi386-linux-gnulibc-2.15.so. erledigt. erledigt. Loaded Symbole für libi386-linux-gnulibc. so.6 Lesen von Symbolen von libld-linux. so.2. Lesen von Symbolen aus usrlibdebuglibi386-linux-gnuld-2.15.so. erledigt. erledigt. Loaded Symbole für libld-linux. so.2 0xb771f424 in kernelvsyscall () (gdb) Kompatibilität mit VisualGDB Führen Sie den Befehl detach nicht manuell unter Visual Studio aus. Verwenden Sie das Dialogfeld VisualGDB-Projekteigenschaften, um VisualGDB zu konfigurieren, um den Befehl detach auszuführen, wenn Sie das Debugging mit Shift-F5 beenden.

No comments:

Post a Comment