Dies hat etwas mit zu tun >.
Nehmen wir an, ich führe eine Sitzung einer Anwendung aus. Lassen Sie mich zum Beispiel noch einmal das Beispiel von qbittorrent nehmen.
Wie bereits erwähnt, geschieht auf diese Weise ein Lauf –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
Eine Möglichkeit, die ich kenne, besteht darin, die Anwendung ordnungsgemäß zu beenden, aber manchmal hängt die Anwendung Ich brauche zu viel Zeit oder antworte einfach nicht.
Dann bleibt mir nur noch die Option CTRL+C
, die, wenn ich sie richtig verstehe, die zugrunde liegende Anwendung beendet , in unserem Beispiel qbittorrent und bin dann in der Lage, gdb mittels
(gdb) quit
zu beenden. Gibt es eine andere Möglichkeit, die Anwendung zu beenden und die Die GDB-Sitzung läuft weiter oder der einzige Weg ist der oben erwähnte grobe Weg.
AFAI weiß, dass das Beenden eines Bewerbungsprozesses die letzte und nicht die erste Lösung sein sollte.
Kommentare
- Wenn Sie unter
gdb
in den Standardeinstellungen ausgeführt werden, beendet Strg-C die Anwendung nicht, sondern bricht nur in den Debugger ein, in dem Sie entscheiden können Was ist zu tun? Verwenden Siecont
, um " schlucken " das Signal und die Anwendung wird ungestört fortgesetzt. Oder verwenden Siesignal 2
, um das SIGINT (2) an die Anwendung zu übergeben. Oder verwenden Siekill
, um die Anwendung zu beenden.
Antwort
Hierfür können Sie Signale verwenden. Bevor Sie Ihr Programm starten, richten Sie USR1
oder USR2
ein, um gdb
zu unterbrechen, ohne die zu beeinflussen Programm:
handle SIGUSR1 nopass
Dann können Sie Ihr Programm ausführen. Wenn Sie es stoppen müssen, führen Sie kill -USR1
von aus eine andere Shell mit der entsprechenden (untergeordneten) PID. gdb
hält die Anwendung an, und Sie können dann Haltepunkte hinzufügen, den Status usw. überprüfen. Wenn Sie möchten, setzen Sie die Ausführung mit cont
.