Debian
當應用程序沒有響應時,如何優雅地退出在 gdb 中執行的應用程序。
這有點關係到gdb set overwrite logging on 應該覆蓋 gdb.txt 對嗎?.
假設我正在執行某個應用程序的會話。出於舉例的目的,讓我再次以 qbittorrent 為例。
正如之前分享的那樣,跑步是如何發生的——
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
我知道的一種方法是優雅地退出應用程序,但有時應用程序掛起/花費太多時間或根本沒有響應。
然後,我剩下的唯一選擇是使用
CTRL+C
它,如果我理解正確的話,它會殺死底層應用程序,在我們的範例 qbittorrent 中,然後能夠通過以下方式退出 gdb(gdb) quit
是否/是否有任何其他方法可以退出應用程序並仍然讓 gdb 會話繼續執行,或者唯一的方法是我上面提到的粗略方法。
AFAI 知道終止應用程序程序應該是最後的解決方案,而不是第一個。
您可以為此使用信號。在你開始你的程序之前,在不影響程序的情況下設置
USR1
或USR2
中斷:gdb
handle SIGUSR1 nopass
然後你可以執行你的程序,當你需要停止它時,
kill -USR1
從另一個具有適當(子)pid 的 shell 執行。gdb
將暫停應用程序,然後您可以添加斷點、檢查狀態等,如果您願意,可以使用cont
.