2010-09-17 118 views
4

當我在調試託管的多線程代碼時,我在Main \ UnitTestRunner線程的斷點處並偶爾啓動單步執行,調試器將切換到另一個線程並開始執行它的代碼。我怎樣才能阻止呢?Visual Studio 2010調試器中的單步執行問題?

使用VS2010 + Resharper 5.1如果它很重要。

更新1:

在單個步驟(F10)命令後的堆仔細看示出了前調試器決定停止執行實際上執行的許多(10-30)的步驟。

這經常發生,足以使調試幾乎不可能。這與Hans提到的issue很相似。

更新2:

我對微軟提起連接一個bug。如果你也有這個問題,請「upvote」。

更新3:「服務發佈」

通過確認M $來進行固定,在未來的一個錯誤解決方法是按照here所述將單元測試定位到.NET 3.5。

+0

我曾經見過這種情況,謝謝你的提問。 – 2010-09-17 17:15:54

+1

這也是VS2008 SP1中的問題,通過修補程序解決。在connect.microsoft.com上報告此問題 – 2010-09-17 18:17:50

回答

7

您可以轉到線程視圖並凍結其他線程。

調試 - >視窗 - >線程

上要凍結並選擇凍結線程然後用鼠標點擊。當你想要再次使用該線程時,請右鍵單擊該線程並選擇解凍。

+0

凍結是否使調試器無法進入線程,或停止線程運行?我需要後臺線程繼續運行,我只是不想調試它們。 – 2010-09-17 17:25:14

+0

@David Lynch:線程無法繼續在後臺運行,因爲這樣在調試中可能會遇到競爭條件,而這些條件不會複製實際的程序執行。似乎Visual Studio試圖保持線程在調試器中以相同的順序運行,並且它們在實際的程序執行過程中以相同的順序運行 - 您可以凍結您沒有使用的線程,但是您的程序可能希望那些線程完成某些事情(或者相反,如果它們仍在運行,他們可能會期望您目前正在調試的內容),所以請謹慎地進行調試。 – SqlRyan 2010-09-17 17:30:09

+0

@rwmnau:多線程應用程序是繼承性異步的,即使在調試器中,線程也是如此運行。 – 2010-09-17 20:16:51

0

除了布賴恩的答案 - 如果你的線程代碼不重疊,您可以點擊在你想停下來,然後點擊「運行到光標」

0

如果你是一個64的下一行位操作系統,確保您的調試器設置被設置爲默認爲64位進程。在調試 - >選項和設置 - > TestDriven.Net - >常規,確保「任何CPU測試」設置爲在64位進程中運行。

+1

這隻與使用TestDriven.Net調試單元測試有關... – 2011-11-04 06:43:56