2016-08-04 71 views
2

我有一個系統,其中5個線程並行運行。我已經放了一個斷點。gdb單步執行全停止模式的單線程

在gdb全停模式中,一旦中斷點被命中,所有線程都停在該斷點處(我當前看到線程2導致了斷點的命中)。現在我希望當我按next時只有線程4運行,並且所有其他線程都繼續保持停止狀態。即我想與線程4一起確保所有其他線程保持停止狀態。

你能建議我該怎麼做。

回答

0

從gdb的文檔:https://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html

在一些操作系統中,您可以通過鎖定OS調度器,只允許一個線程來運行修改GDB的默認行爲。

集調度鎖定模式

設置調度鎖定模式。它適用於正常執行,記錄模式和重放模式。如果它關閉,則不會鎖定,任何線程都可能隨時運行。如果打開,則只有當前線程可以在下級恢復時運行。步進模式優化爲單步;它可以防止其他線程在步進時搶佔當前線程,以便調試的重點不會意外更改。其他線程在執行時永遠不會有機會運行,而當您使用諸如「繼續」,「直到」或「完成」之類的命令時,它們完全可以自由運行。但是,除非另一個線程在其時間片期間遇到斷點,否則gdb不會將當前線程從正在調試的線程中移開。重播模式在記錄模式下表現得像關閉一樣,在重放模式下表現得如此。

相關問題