2011-06-17 55 views
1

我知道標題有點雄心勃勃,但我想知道在調用C#程序時在調用堆棧窗口(Visual Studio 2010)中顯示先前狀態後是否有方法,從那裏重新啓動(例如點擊「繼續」/ F5)。在Visual Studio 2010中調用堆棧時間機器

這對調試生成異常的lambda表達式特別有用,因爲無法向外移動。

對於一個真正的OO代碼時間機器來說,所有對象的歷史狀態都需要存儲在內存中,所以我懷疑這個階段是否可行。 現在,如果所有對象的狀態變化不大,那麼我們可以保持當前狀態並及時跳回(作爲通過「編輯並繼續」執行相同操作的快捷方式)。

+2

準備好信用卡,然後閱讀以下內容:http://msdn.microsoft.com/en-us/magazine/ee336126.aspx – 2011-06-17 01:16:43

+0

有趣的是,IntelliTrace不允許在更正錯誤之後從早期狀態重新啓動(以避免再次通過整個測試路徑)。 – 2011-06-17 16:35:19

回答

3

有些時候,你可以右鍵點擊一個堆棧幀並選擇「放鬆到這裏」(或非常相似的措辭)。這並不總是可能的,我不知道有什麼必要的條件,但我準備做一個猜測,什麼可能阻止它:

  • 中間調用堆棧上的本機代碼框架
  • 在StackOverflowException被休止(顯然,死亡的過程在任何情況下)
  • 也許lambda表達式或阻止編輯並繼續從工作的其他東西(?)

基本上,什麼「異常」。

除此之外,如果它工作,那麼你去!

+0

事實上,我可以看到「放鬆到這個框架」,但它是灰色的。有意思的是,在罕見的情況下,沒有什麼「不確定的」(不幸的是,lambda表達式對於這個目的來說確實很不尋常)。 – 2011-06-17 16:10:51

0

這是一個有點缺憾,但:

而在調用堆棧窗口中查看以前的狀態,打開反彙編窗口(調試|窗口|拆卸或CTRL + ALT + d)。現在你應該能夠創建一個斷點,當你回到那個位置時它將停止執行。

如果您不在乎執行什麼,請按F5並允許代碼返回到您的新斷點。

現在右鍵單擊要從其重新啓動的語句,然後選擇設置下一個語句。按F5從那裏重新開始。

如果您關心在返回新斷點的過程中還執行了什麼操作,可以使用Set Next Statement將程序計數器設置爲您所在函數的末尾,然後使用Shift + F11跳過函數(因此不執行該函數中的任何其餘邏輯)。根據需要重複,直到回到新的斷點。

注意various dire warnings about using Set Next Statement

編輯6/18當我測試了上面,我在運行Visual Studio 2010旗艦版。我剛剛檢查過Visual Studio Express C#,它不支持反彙編調試窗口。我什麼時候可以檢查Visual Studio 2010 Professional並再次更新這個答案。如果你有Visual Studio Ultimate,那麼@Hans的Intellitrace建議可能是更好的選擇。

+0

有趣,但我找不到反彙編窗口(並且CTRL + ALT + D什麼都不做)。我使用VS2010。我錯過了什麼嗎? – 2011-06-17 16:15:33

+0

在調試器中出現Disassembly項目之前,必須先在調試器中運行程序。 Windows菜單。 – 2011-06-17 18:26:19

相關問題