回答

3

通常,我通過右鍵單擊線程面板來凍結其他線程。我不知道這是否理智。

6

這是默認的,因爲在調試器中運行程序不應該改變程序的結果,我認爲。

當程序正在運行時,它會不斷地在線程間切換,所以如果調試程序沒有這樣做,程序的行爲會有所不同。

在任何情況下,我知道阻止它的唯一方法是打開線程窗口,右鍵單擊除當前線程之外的所有其他線程,然後選擇freeze。 (請記住thaw之後)

+0

這是有道理的......但不會改變它非常討厭的事實。 :)如果MS添加了一個配置選項,以便在斷點處於當前線程內時保持在當前線程中,這將對調試有幫助......這樣,可以調試當時正在執行的邏輯,而不會出現繁瑣和相關的問題調試帶有凍結線程的程序時滯後。 – Jon 2015-01-07 19:22:59

19

當你說,「當調試某個線程時,Visual Studio會隨機跳到不同的線程」,你的意思是說,當你在特定的線程上通過代碼時,你可能會在另一個線程上打斷點?

如果是這樣,你可以使用線程窗口「凍結」線程以外的其他您感興趣的調試之一:

http://msdn.microsoft.com/en-us/library/w15yf86f.aspx

從線程窗口,您可以設置 活動線程。此外,您可以凍結或解凍每個線程的執行 。凍結 阻止執行線程。 解凍使它能夠繼續。兩個 垂直藍條表示線程凍結 。

對此的支持可能取決於您擁有的Visual Studio版本(例如,我認爲Express版本不支持線程窗口)。

4

這裏所有的答案都是關於凍結線程的,但是當它們有很多時候會變得很麻煩,而且你不知道哪一個會凍結。我發現一個更簡單的伎倆

當一個斷點由線程打,並說Ĵķ,等會打相同的一段時間,然後暫時禁用斷點並開始調試線程 。我發現調試器不會跳轉到其他線程,因爲對於那些線程來說,沒有任何斷點可以進入。完成調試後啓用斷點。

相關問題