gdb多線程調試

來源:互聯網
上載者:User

標籤:異常   線程   檢查進程   調試   通過   鎖定   停止   中間   top   

gdb支援多線程調試,有兩種模:
預設是 all-stop mode,用gdb調試時有一個線程在斷點處停止,其他所有線程也會停止。
gdb也支援non-stop mode,當某一個線程停止時,其他線程會繼續運行。

在all-stop mode下,當進程在gdb下停止時,所有的線程都停止運行,停止的不只是當前線程。
這樣我們可以檢查進程的所有狀態,例如線程切換,不用管會改變。
相反的,不論你如何啟動進程,當你用單步調試命令“step或next”,所有的線程開始執行。

特別的,gdb不能用單步調試命令讓所有的線程都單步。由於執行線程調度的是作業系統不是gdb,當前線程執行了一步,
其他線程可能執行了N步。另外,當進程停止時,線程會在中間狀態停止,不會在邊界狀態停止。

當執行next/step/continue, 你可能會發現你的進程被另外一個線程停止。在當前線程完成單步運行前,其他線程運行遇到斷點/訊號/異常。

每當因為gdb停止進程,因為斷點或訊號, gdb會選擇一個遇到簡訊或訊號中斷的線程。
gdb切換線程時會提示“[Switching to Thread n]”

在一些系統中,gdb可以通過鎖定作業系統線程調度,只允許一個線程運行。
set scheduler-locking mode
設定調度鎖定模式,如果是off,所有線程線程都會運行。如果是on,當恢複運行時只有當前線程會繼續運行。
單步調試命令會阻止其他線程搶佔, 調試結果會和預期一致。在單步命令調試下,其他線程沒機會運行。
當執行continue/util/finish 時,其他進程也會運行,除非其他線程遇到斷點或訊號,否則會調試資訊一直會停留在當前線程。

show scheduler-locking
顯示當前線程調度鎖定狀態

gdb多線程調試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.