Visual Studio 調試系列4 單步後退來檢查舊應用狀態(使用使用 IntelliTrace 窗口)

  IntelliTrace 後退會在每一個斷點處及調試器步驟事件發生時自動拍攝應用程序的快照。 憑藉記錄的快照即可以返回到上一個斷點或步驟,並查看當時應用程序的狀態。 若是但願查看之前的應用程序狀態,但不想從新啓動調試或從新建立所需應用狀態,使用 IntelliTrace 後退能夠節省時間。html

  自 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 應用程序。工具

01 啓用 IntelliTrace 事件和快照模式

一、在 Visual Studio Enterprise 中打開項目。
二、打開「工具」 > 「選項」 > 「IntelliTrace」設置,或者 「調試」> 「IntelliTrace」>「打開 IntelliTrace 設置」visual-studio

     

   並選擇「IntelliTrace事件和快照」選項 。
      從 Visual Studio 2017 Enterprise 版本 15.9 預覽版 2 開始,本選項爲「IntelliTrace 快照(託管和本機)」 。性能

三、若是想要配置用於查看異常發生時的快照的選項,請從「選項」對話框選擇「IntelliTrace」 > 「高級」 。spa

這些選項從 Visual Studio 2017 Enterprise 版本 15.7 開始提供。debug

啓用事件和快照時,也默認啓用異常發生時拍攝快照。 能夠取消選中「在異常事件發生時收集快照」來禁用異常發生時拍攝快照 。 啓用此功能後,可拍攝未處理異常的快照。 對於已處理的異常,只有在引起異常時且該異常不屬於以前引起的異常的再次引起時纔會拍攝快照。 從下拉列表中選擇一個值,能夠設置異常發生時拍攝的最大快照數。 每次應用進入中斷模式時該最大值都適用(例如應用命中斷點時)。指針

僅爲 IntelliTrace 記錄的異常事件拍攝快照。 對於託管代碼,選擇「工具」 > 「選項」 > 「IntelliTrace 事件」,能夠指定 IntelliTrace 記錄的事件 。調試

「IntelliTrace」選項頁上的全部設置都針對 Visual Studio 這個總體,而不針對單個項目或解決方案。 這些設置中的更改適用於 Visual Studio 的全部實例、全部調試會話和全部項目或解決方案。orm

四、在項目中設置一個或多個斷點並開始調試(按 F5),或經過逐步執行代碼來啓動調試(F10 或 F11) 。htm

IntelliTrace 在每一個調試器步驟、斷點事件和未處理異常事件發生時拍攝應用程序進程的快照。 這些事件和其餘 IntelliTrace 事件一塊兒記錄在「診斷工具」窗口中的「事件」選項卡上 。 若要打開此窗口,請選擇「調試」 > 「Windows」 > 「顯示診斷工具」 。

快照功能可用的事件旁邊會顯示照相機圖標。

因爲性能緣由,單步執行過快時不拍攝快照。 若是該步驟旁沒有顯示照相機圖標,請嘗試將單步執行速度放慢。

02 導航和查看快照

一、使用「調試」工具欄中的「後退」(Alt + [) 和「前進」(Alt + ]) 按鈕,在事件間進行導航 。

這些按鈕用於瀏覽「診斷工具」窗口中「事件」選項卡上顯示的事件 。 後退或前進到某個事件會自動激活所選事件的歷史調試

「後退」和「前進」按鈕

後退或前進時,Visual Studio 進入歷史調試模式。 在此模式下,調試器上下文將切換到記錄所選事件時的時間。 Visual Studio 還將指針移動到源窗口中的相應代碼行。

在此視圖中,能夠檢查「調用堆棧」、「局部變量」、「自動」以及「監視」窗口中的值 。 還能夠在變量上懸停鼠標,以在「即時」窗口上查看數據提示並進行表達式求值 。 看到的數據源於在該時間點拍攝的應用程序進程的快照。

所以,舉例來講,若是命中斷點並執行步驟 (F10),則「後退」按鈕將在斷點對應的代碼行上將 Visual Studio 置於歷史模式 。

二、若要返回到實時執行,請在信息欄中選擇「繼續」(F5) 或單擊「返回實時調試」連接 。

三、還能夠從「事件」選項卡查看快照 。若要執行此操做,請選擇帶有快照的事件,而後單擊「激活歷史調試」 。

與「設置下一語句」命令不一樣,查看快照不會從新運行代碼;它提供在過去發生的某個時間點的應用程序狀態的靜態視圖 。

03 IntelliTrace 後退功能與 IntelliTrace 僅事件模式有何不一樣

僅事件模式下的 IntelliTrace 容許在調試器步驟發生時和斷點處激活歷史調試。 可是,IntelliTrace 只捕獲已打開的「局部變量」和「自動」窗口中的數據,而且只捕獲已展開的且在視圖中的數據 。 在僅事件模式下,一般沒有變量和複雜對象的完整視圖。 此外,不支持在「監視」窗口中進行表達式求值和查看數據 。

在事件和快照模式下,IntelliTrace 捕獲應用程序進程(包括複雜對象)的所有快照。 在代碼行上,能夠看到如同在斷點處中止時看到的信息(且以前是否已展開信息並不重要)。 查看快照時,還支持表達式求值。  

此功能對性能有何影響? 

對整體單步執行性能的影響取決於應用程序。 拍攝快照大約耗用 30 毫秒。 拍攝快照時,爲應用的進程建立分支且分支副本會掛起。 查看快照時,Visual Studio 將附加到進程的分支副本。 對於每一個快照,Visual Studio 僅複製頁表並將頁設置爲寫入時複製。 若是堆上的對象在具備關聯快照的調試器步驟之間更改,則將複製相應的頁表,而產生最小的內存成本。 若是 Visual Studio 檢測到拍攝快照內存不足,則不會拍攝。

IntelliTrace 詳細信息與使用功能,請參考:https://docs.microsoft.com/zh-cn/visualstudio/debugger/intellitrace-features?view=vs-2019

 
相關文章
相關標籤/搜索