共用方式為


時間移動偵錯 - 概觀

時間旅行除錯標誌的截圖,顯示時鐘。

什麼是時間移動偵錯?

時間旅行偵錯 (TTD) 是一種工具,可在進程執行時擷取程式的追蹤,並在稍後向前和向後重播。 TTD 可讓您「回溯」調試器會話,無需重複重現問題,直到找到錯誤,從而協助您更有效地進行偵錯任務。

TTD 可讓您及時返回,以進一步了解導致 Bug 的條件,並多次重新執行,以瞭解如何最好地修正問題。

TTD 比損毀傾印檔案具有優勢,損毀傾印檔案通常會遺漏導致最終失敗的狀態和執行路徑。

如果您自己無法弄清楚問題,您可以與同事分享追蹤記錄,使他們能夠精確地看到您所看到的。 此功能使協作比即時調試更容易,因為記錄的指令相同,而不同 PC 上的地址位置和程式碼執行不同。 您也可以共用特定時間點,以協助同事找出要開始的位置。

TTD 很有效率,而且會擷取追蹤檔案中的程式代碼執行,因此會盡可能少地新增額外負荷。

TTD 包含一組偵錯工具資料模型物件,可用來使用 LINQ 查詢追蹤。 例如,您可以使用 TTD 物件來找出載入特定程式代碼模組或找出所有例外狀況。

具有時間移動偵錯命令和三個時程表的 WinDbg 螢幕快照。

需求

時間旅行調試與 WinDbg 集成,提供無縫的錄製和重播體驗。

若要使用 TTD,您必須以提高許可權執行偵錯工具。 使用具有系統管理員許可權的帳戶來安裝 WinDbg,並在偵錯工具中錄製時使用該帳戶。 若要使用提高許可權執行偵錯工具,請選取並按住 (或以滑鼠右鍵按兩下) [開始] 功能表中的 WinDbg 圖示,然後選取 [ 更多 > ] [以系統管理員身分執行]。

版本資訊

TTD 不斷發展。 如需最新資訊,請參閱 時間旅行偵錯版本資訊

包含錄製的已建立追蹤檔案可能包含個人標識或安全性相關信息,包括但不限於檔案路徑、登錄、記憶體或檔案內容。 確切的資訊取決於當目標流程活動被記錄時的狀態。 在與其他人共享錄製檔案時,請注意這一點。

TTD.exe命令行錄製公用程式

除了在 WinDbg UI 中錄製追蹤之外,還有TTD.exe命令行公用程式可用來記錄追蹤。

您可能會遇到只需要 TTD 命令列錄製器的情境,例如在沒有安裝調試程式的電腦上進行錄製、複雜的錄製情境、測試自動化等。在這些情境中,您可以只透過 URL 安裝 TTD 命令列錄製器。 如需詳細資訊,請參閱 時間移動偵錯 - TTD.exe命令行公用程式

偵錯工具的比較

下表摘要說明可用之不同偵錯解決方案的優缺點。

方法 優點 缺點
即時偵錯 互動式體驗,查看執行流程,可以變更目標狀態,熟悉的工具在熟悉的設定。 中斷用戶體驗,可能需要努力重複重現問題,可能會影響安全性,而不一定是生產系統上的選項。 由於在故障點回推以確定原因的過程中存在困難。
傾倒 根據觸發因素,無需預先撰寫程式碼,具低侵入性。 連續的快照集或即時傾印提供簡單的「隨時間變化」檢視。 如果未使用,額外負荷基本上為零。
遙測和記錄 輕量型,通常與業務場景/用戶行為相關,友好於機器學習。 非預期的程式碼路徑中發生問題(沒有遙測)。 缺少數據深度,以靜態方式編譯成程序代碼。
時間旅行偵錯 (TTD) 非常適合複雜的 Bug,無需事先撰寫代碼,離線可重複偵錯,便於分析,擷取所有內容。 記錄時間的大型額外負荷。 可能會收集更多所需的數據。 數據檔可能會變得很大。

視訊培訓

若要深入瞭解 TTD,請參閱這些影片。

重組工具 185 - Ivette 和 JamesP 討論 TTD 的基本概念,並在 WinDbg 中展示一些功能

重組工具 186 - Jordi 和 JCAB 示範 WinDbg 中 TTD 的更多功能

CppCon (YouTube) - Jordi、Ken 和 JamesM 在 CppCon 2017 上以 WinDbg 呈現 TTD

追蹤檔案基本概念

追蹤檔案大小

追蹤檔案可能會變大。 您需要確保有足夠的可用空間。 如果您記錄程式數分鐘,追蹤檔案可能會快速成長為數 GB。 TTD 不會設定追蹤檔案的大小上限,以允許複雜的長時間執行案例。 迅速重現問題可使追蹤檔案的大小保持在盡可能小的範圍。

追蹤和索引檔案

追蹤檔案 (.run) 會在錄製期間儲存程式代碼執行。

當您停止記錄時,系統會建立索引檔 (.idx) 以最佳化追蹤資訊的存取。 WinDbg 也會在開啟追蹤檔案時自動建立索引檔案。

索引檔案可以很大,通常是追蹤檔案的兩倍。

您可以使用命令 !tt.index ,從追蹤檔重新建立索引檔。

0:000> !tt.index
Successfully created the index in 10ms.

錄製錯誤和其他錄製輸出會移至 WinDbg 記錄檔。

您可以將所有輸出檔案儲存在您設定的位置。 預設位置位於使用者的文件資料夾中。 例如,針對 User1,TTD 檔案會儲存在這裡:

C:\Users\User1\Documents

如需使用追蹤檔案的詳細資訊,請參閱 時間旅行偵錯 - 使用追蹤檔案

需要留意的事項

防病毒軟體不相容

您可能會遇到不相容的情況,因為 TTD 採用掛鉤進程的方法來進行記錄。 通常,防毒軟體或其他試圖追蹤和隱藏系統記憶體呼叫的系統軟體會出現問題。 如果您在錄製時遇到問題,例如權限不足訊息,請嘗試暫時停用任何防毒軟體。

其他嘗試阻止記憶體存取的實用程式也可能有問題。 例如,Microsoft 增強型風險降低體驗工具組。

與 TTD 衝突的環境的另一個範例是 Electron 應用程式架構。 在此情況下,追蹤可能會記錄,但所記錄的處理程序也可能會死結或損毀。

僅限使用者模式

TTD 目前僅支援使用者模式作業,因此您無法追蹤核心模式進程。

唯讀播放

您可以回到時間,但無法變更歷程記錄。 您可以使用讀取記憶體命令,但無法使用修改或寫入記憶體的命令。

系統保護的程序

某些 Windows 系統受保護的進程,例如受保護的進程輕量級 (PPL) 進程,會受到保護。 TTD 無法將自己插入到受保護的程序中,以便記錄程式碼的執行。

錄製的效能影響

錄製應用程式或程式會影響計算機的效能。 實際效能開銷會根據錄製期間執行的程式碼數量和類型而有所不同。 在典型的錄製案例中,您可以預期大約達到 10x-20 倍的效能。 有時 UI 中沒有明顯的速度變慢。 但對於資源密集度較高的作業,例如「檔案開啟」對話方塊,您會注意到記錄所帶來的影響。

追蹤檔案錯誤

可能會發生追蹤檔錯誤。 如需詳細資訊,請參閱 時間移動偵錯 - 疑難解答

時間旅行調試工具的高級功能

時間表

時間軸是執行期間發生的事件的可視化表示法。 這些事件可能的位置包括:斷點、記憶體讀取/寫入、函式呼叫與返回,以及例外狀況。 如需時程表的詳細資訊,請參閱 WinDbg - 時程表

調試程序數據模型支援

  • 內建的數據模型支援 - TTD 包含數據模型支援。 使用 LINQ 查詢來分析應用程式失敗可能是功能強大的工具。 您可以使用 WinDbg 中的資料模型視窗來處理可展開且可流覽的 和 dx版本dx -g,讓您使用 NatVis、JavaScript 和 LINQ 查詢來建立資料表。

如需調試程序數據模型的一般資訊,請參閱 WinDbg - 數據模型。 如需使用 TTD 調試程式物件模型的相關信息,請參閱 時間移動偵錯 - 時間移動偵錯對象的簡介。

腳本支援

如需使用 JavaScript 和 NatVis 的一般資訊,請參閱 WinDbg - 腳本。

TTD.exe命令行公用程式

TTD.exe命令行公用程式可用來記錄追蹤。 如需詳細資訊,請參閱 時間移動偵錯 - TTD.exe命令行公用程式

受控代碼 TTD 支援

您可以使用以 64 位模式執行的 SOS 偵錯延伸模組 (sos.dll) ,在 WinDbg 中使用 TTD 偵錯 Managed 程式代碼。 如需詳細資訊,請參閱 使用 Windows 偵錯工具偵錯 Managed 程式碼

開始使用TTD

從這裡開始

如果您是 TTD 的新手,請遵循下列學習路徑:

  1. 記錄追蹤 - 擷取您的第一個執行緒追蹤
  2. 重播追蹤 - 瀏覽和分析您的錄製檔
  3. 範例應用程式逐步解說 - 逐步偵錯範例

需要協助嗎?

進階功能