IntelliTrace 后退會在每個斷點處及調試器步驟事件發生時自動拍攝應用程序的快照。 憑借記錄的快照便可以返回到上一個斷點或步驟,並查看當時應用程序的狀態。 如果希望查看以前的應用程序狀態,但不想重新啟動調試或重新創建所需應用狀態,使用 IntelliTrace 后退可以節省時間。
自 Visual Studio Enterprise 2015 版本、VS Enterprise2017 15.3 版本及更高版本起提供 IntelliTrace 后退功能,並且它需要 Windows 10 周年更新或更高版本。 當前支持將該功能用於調試 ASP.NET、WinForms、WPF、托管控制台應用和托管類庫。 從 Visual Studio 2017 Enterprise 版本 15.7 開始,ASP.NET Core 和.NET Core 也支持該功能。 從 Visual Studio 2017 Enterprise 版本 15.9 預覽版 2 開始,面向 Windows 的本機應用也支持該功能。 當前不支持調試 UWP 應用程序。
1、在 Visual Studio Enterprise 中打開項目。
2、打開“工具” > “選項” > “IntelliTrace”設置,或者 “調試”> “IntelliTrace”>“打開 IntelliTrace 設置”
並選擇“IntelliTrace事件和快照”選項 。
從 Visual Studio 2017 Enterprise 版本 15.9 預覽版 2 開始,本選項為“IntelliTrace 快照(托管和本機)” 。
3、如果想要配置用於查看異常發生時的快照的選項,請從“選項”對話框選擇“IntelliTrace” > “高級” 。
這些選項從 Visual Studio 2017 Enterprise 版本 15.7 開始提供。
啟用事件和快照時,也默認啟用異常發生時拍攝快照。 可以取消選中“在異常事件發生時收集快照”來禁用異常發生時拍攝快照 。 啟用此功能后,可拍攝未處理異常的快照。 對於已處理的異常,只有在引發異常時且該異常不屬於之前引發的異常的再次引發時才會拍攝快照。 從下拉列表中選擇一個值,可以設置異常發生時拍攝的最大快照數。 每次應用進入中斷模式時該最大值都適用(例如應用命中斷點時)。
僅為 IntelliTrace 記錄的異常事件拍攝快照。 對於托管代碼,選擇“工具” > “選項” > “IntelliTrace 事件”,可以指定 IntelliTrace 記錄的事件 。
“IntelliTrace”選項頁上的所有設置都針對 Visual Studio 這個整體,而不針對單個項目或解決方案。 這些設置中的更改適用於 Visual Studio 的所有實例、所有調試會話和所有項目或解決方案。
4、在項目中設置一個或多個斷點並開始調試(按 F5),或通過逐步執行代碼來啟動調試(F10 或 F11) 。
IntelliTrace 在每個調試器步驟、斷點事件和未處理異常事件發生時拍攝應用程序進程的快照。 這些事件和其他 IntelliTrace 事件一起記錄在“診斷工具”窗口中的“事件”選項卡上 。 若要打開此窗口,請選擇“調試” > “Windows” > “顯示診斷工具” 。
快照功能可用的事件旁邊會顯示照相機圖標。
由於性能原因,單步執行過快時不拍攝快照。 如果該步驟旁沒有顯示照相機圖標,請嘗試將單步執行速度放慢。
1、使用“調試”工具欄中的“后退”(Alt + [) 和“前進”(Alt + ]) 按鈕,在事件間進行導航 。
這些按鈕用於瀏覽“診斷工具”窗口中“事件”選項卡上顯示的事件 。 后退或前進到某個事件會自動激活所選事件的歷史調試。
后退或前進時,Visual Studio 進入歷史調試模式。 在此模式下,調試器上下文將切換到記錄所選事件時的時間。 Visual Studio 還將指針移動到源窗口中的相應代碼行。
在此視圖中,可以檢查“調用堆棧”、“局部變量”、“自動”以及“監視”窗口中的值 。 還可以在變量上懸停鼠標,以在“即時”窗口上查看數據提示並進行表達式求值 。 看到的數據源於在該時間點拍攝的應用程序進程的快照。
因此,舉例來說,如果命中斷點並執行步驟 (F10),則“后退”按鈕將在斷點對應的代碼行上將 Visual Studio 置於歷史模式 。
2、若要返回到實時執行,請在信息欄中選擇“繼續”(F5) 或單擊“返回實時調試”鏈接 。
3、還可以從“事件”選項卡查看快照 。若要執行此操作,請選擇帶有快照的事件,然后單擊“激活歷史調試” 。
與“設置下一語句”命令不同,查看快照不會重新運行代碼;它提供在過去發生的某個時間點的應用程序狀態的靜態視圖 。
僅事件模式下的 IntelliTrace 允許在調試器步驟發生時和斷點處激活歷史調試。 但是,IntelliTrace 只捕獲已打開的“局部變量”和“自動”窗口中的數據,並且只捕獲已展開的且在視圖中的數據 。 在僅事件模式下,通常沒有變量和復雜對象的完整視圖。 此外,不支持在“監視”窗口中進行表達式求值和查看數據 。
在事件和快照模式下,IntelliTrace 捕獲應用程序進程(包括復雜對象)的全部快照。 在代碼行上,可以看到如同在斷點處停止時看到的信息(且之前是否已展開信息並不重要)。 查看快照時,還支持表達式求值。
此功能對性能有何影響?
對總體單步執行性能的影響取決於應用程序。 拍攝快照大約耗用 30 毫秒。 拍攝快照時,為應用的進程創建分支且分支副本會掛起。 查看快照時,Visual Studio 將附加到進程的分支副本。 對於每個快照,Visual Studio 僅復制頁表並將頁設置為寫入時復制。 如果堆上的對象在具有關聯快照的調試器步驟之間更改,則將復制相應的頁表,而產生最小的內存成本。 如果 Visual Studio 檢測到拍攝快照內存不足,則不會拍攝。
IntelliTrace 詳細信息與使用功能,請參考:https://docs.microsoft.com/zh-cn/visualstudio/debugger/intellitrace-features?view=vs-2019