Debian

當應用程序沒有響應時,如何優雅地退出在 gdb 中執行的應用程序。

  • October 19, 2017

這有點關係到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 知道終止應用程序程序應該是最後的解決方案,而不是第一個。

您可以為此使用信號。在你開始你的程序之前,在不影響程序的情況下設置USR1USR2中斷:gdb

handle SIGUSR1 nopass

然後你可以執行你的程序,當你需要停止它時,kill -USR1從另一個具有適當(子)pid 的 shell 執行。gdb將暫停應用程序,然後您可以添加斷點、檢查狀態等,如果您願意,可以使用cont.

引用自:https://unix.stackexchange.com/questions/399148