2012-05-04 53 views
14

我知道這個問題的答案,我把它在這裏給別人看它Eclipse CDT多線程調試不是最優 - 如何獨佔運行線程?

如果你使用Eclipse CDT,你大概明白日食是不是一個調試器,它只是一個應用程序前置式結束,特別是GDB。因此,在調試C++程序時,實際上只是以更舒適的方式使用GDB。如果你必須在eclipse CDT中調試一個多線程程序,你會發現事情很快就會變得緊張起來,因爲當你遇到一個斷點時,所有的線程停止,當一個線程嘗試在一個特定的線程中執行一行時,它也運行其他線程。爲了使它正常工作,線程必須能夠被任意和非常地運行 - 這樣,當程序員執行一條線時,它只會執行特定的線程。

因此,默認情況下,默認情況下,gdb的設置會關閉「調度程序鎖定」。如果你調試多線程應用程序,你就會明白,爲了達到預期的行爲,這必須在GDB上。如何運行這個命令:

set scheduler-locking on 

在eclipse中的GDB CDT中?

回答

3

也許如果你添加下面的GDB腳本程序停止並關閉它,如果你繼續時可能設置變量:

define hook-step 
set scheduler-locking on 
end 
define hookpost-step 
set scheduler-locking off 
end 
define hook-run 
set scheduler-locking off 
end 
define hook-continue 
set scheduler-locking off 
end 
+2

你究竟從Eclipse內部執行GDB腳本到底如何? – rbaleksandar

3

至少有一種解決問題的方法是知道如何瀏覽eclipse提供的大量功能。通常情況下,當一個程序啓動時,Eclipse CDT會切換控制檯窗口(如果您打開它,通常位於底部)來顯示程序的輸入/輸出。

但是如果你不知道,你可以改變它 - 見image。第二個右邊的按鈕 - 藍色的看起來像監視器 - 你可以選擇GDB輸入控制檯。它也在this thread中討論過。

從那裏只輸入命令。

解決,但需要一個更好的解決方案

但現在,這已經得到解決,解決它作爲方便易用的問題有更好的方式;每次程序啓動時必須鍵入設置調度程序鎖定是愚蠢的。但加載gdbinit文件的問題在於,在eclipse設置gdb程序解決之前,gdbinit文件已經被找到。這是一個問題,因爲它會導致調試器視圖在eclipse中掛起,就像gdb抱怨的那樣。爲了理解發生了什麼,嘗試啓動gdb,然後在不加載要執行的二進制文件的情況下給出該命令。它失敗 - 那麼如何將其設置爲粘性選項?

+0

嗨亞當,任何答案了嗎? – ransh

+0

嗯,我想我正在尋找的是日食CDT開發人員注意我不得不說的話;我不是一個eclipse程序員。某種按鈕會很好 –

+0

謝謝,您是否還看到在刪除所有斷點後仍停在同一位置的行爲? – ransh