0

我有一個應用程序,其中有幾個線程,並且大部分時間他們只是(用AutoResetEvent.Wait EG)等待一個事件的發生。繼續在VS2010調試,而所有線程都在睡眠,等待或加入

在這種情況下,如果我嘗試使用即時窗口來執行我get命令「因爲當前線程處於睡眠無法計算表達式,等待,或加入」,不管我用什麼的線程。我想知道是否有任何技巧可以用來讓線程停止等待(比如以某種方式設置AutoResetEvent)。

我讀過Debugging whilst paused and 'cannot evaluate expression'所以我擔心這可能是不可能的。

+1

我相信(?)線程必須被打破(停止),然後才能使用即時窗口。 – 2013-03-22 04:10:15

+0

@JonathonReinhart:我可以在VS.Net點擊暫停,但隨後在那個時候所有的線程都已經處於「休眠,等待或加入」。 – user276648 2013-03-25 01:05:19

回答

2

我認爲你唯一的選擇

  • 提前一些線程永遠不會在本機代碼(某種忙等待),可以停止注射。你將會失去一個核心,但至少可以進行調試。
  • 有特殊線程,將等待一些外部命令觸發事件...
  • 放棄表達式/立即窗口,並依靠內存轉儲或使用WinDbg與SoS。

基本上沒有託管的線程沒有卡在本機代碼中,你不能安全地在調試過程中運行託管代碼(自2010年鏈接問題以來沒有任何新的東西)。

+0

謝謝,這就是我所害怕的。實際上,我的應用程序總是在監聽新的連接,所以我只是用Socket.Connect創建了一個小程序。但我想知道是否有其他方式,以防我沒有這個線程。 – user276648 2013-03-25 01:07:59