簡體   English   中英

使用 GDB 調試正在運行的守護進程

[英]debugging a running daemon with GDB

我想用 GDB 調試一個正在運行的守護進程。 我有相應進程的進程ID。 我輸入:gdb attach process id info threads

我正在獲取線程列表。 * 一個是當前正在運行的一個線程(如果我錯了請糾正我)

現在我發送:

systemctl kill daemonname (這個命令我在其他終端上運行)

現在我想在點擊這個命令后檢查哪個線程正在運行。

因為我的守護進程卡住了。 它沒有正確殺死。 我嘗試使用 service-name status 命令。 因為在上面的“servicename status”命令之后它被卡住了。 我想跟蹤最后一個卡住的線程,因為我的守護進程仍未被殺死,但運行檢查該守護進程狀態的命令被卡住了,output 上沒有 output 即將到來。 而如果它被正確殺死,它應該顯示該服務沒有運行或找不到命令。

請幫助我..我是新人

我嘗試使用 service-name status 命令。

你可能拿錯了。

執行systemctl kill daemonname后,您想將 GDB 附加到進程並查看它卡在哪里(使用thread apply all where )。

您可能會看到您的線程已死鎖(例如,線程 T1 正在等待由線程 T2 持有的互斥鎖 A;線程 T2 正在等待由線程 T1 持有的互斥鎖 B)。

我想追蹤最后一個卡住的線程

一般來說,跟蹤多線程進程是一件傻事,因為您正在跟蹤進程這一事實會改變執行環境,並且通常會導致它不再匹配執行而不進行跟蹤。

相反,您應該考慮不變量,並確保它們不被違反。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM