微軟在其Visual Studio Enterprise 2019上的快照除錯器(Snapshot Debugger)整合時間旅行除錯(Time Travel Debugging,TTD)功能,讓開發者可以紀錄應用程式執行路徑,並能來回重新播放,更容易地找出僅會出現在生產環境的程式臭蟲。

微軟提到,程式最容易除錯的形式是在內部循環(Inner Loop),也就是在開發者把程式碼推送到版本控制系統前,在本機端執行審查和除錯程式碼的時候,在內部循環遇到的問題,通常都是可存取且可重複的問題,因此容易理解診斷,而在生產環境除錯,則需要更詳細的資訊才能快速定位問題。

現在的偵錯器通常會讓開發者設置中斷點,開發者可以選擇暫停或繼續執行,而這樣的方式只能紀錄離散時刻的事件以及資料,包括快照、日誌記錄和崩潰傾印檔案等方法,都無法提供失敗時的詳細執行路徑細節。

而TTD則可以提供更詳細的除錯資訊,是一種逆向除錯解決方案,讓開發者紀錄應用程式或是程序的程式碼執行,並且能以向前或是向後的方式,重新播放Visual Studio中的執行路徑,讓開發者可以更全面地掌握導致特定錯誤的條件,就像是在本地端的內部循環偵錯一樣。

現在微軟在快照除錯器中整合TTD,讓開發者可以紀錄應用程式執行,並在Visual Studio 2019 Enterprise中播放錄製的內容,由於TTD針對快照點(Snappoint)配對的執行緒紀錄,因此會執行到方法(Method)結束為止。

開發者可以在具有ASP.NET 4.8以上,在Azure虛擬機器上的Windows作業系統,使用最新版Visual Studio Enterprise 2019啟用TTD預覽。開發者在Visual Studio Enterprise中,打開想要使用TTD的專案,並且確保Azure虛擬機器上存在一份相同版本的程式碼。選擇偵錯選項中的附加快照除錯器,接著選擇專案部署具有Azure儲存帳號的Azure虛擬機器。而要執行這個動作,開發者需要安裝快照除錯器網站擴充套件。

在附加快照除錯器的視窗中選取TTD選項,一旦點選附加之後,Visual Studio就會進入快照除錯器模式,開始可以使用TTD紀錄應用程式執行。開發者可以創建快照點觸發TTD,而在快照收集完成之後,就能使用命令列工具檢視快照。

由於現在TTD還在預覽階段,只支援Azure虛擬機器上執行的AMD64網頁應用程式,微軟提到,這個錄製的過程,會影響程序的執行效能,影響的程度根據程序的大小與活動執行緒的數量而不同,而TTD的使用體驗,也會在像是垃圾回收壓縮階段等不同情況受到影響,由於程式執行紀錄只會由快照點的執行緒觸發,因此之後交替的執行緒記錄狀況也會有所變化。

目前預覽版本TTD產生的檔案大小,從MB到GB都有可能,取決於對話執行的時間以及網頁應用程式運作的時間,而TTD產生的檔案會在快照除錯器對話結束時被移除,微軟建議至少應該要在具有8 GB記憶體的虛擬機器上,TTD才能順利執行。


Advertisement

更多 iThome相關內容