時間旅行偵錯版本說明

具有時鐘的時間移動偵錯標誌。

本主題提供時間移動偵錯新功能的相關信息。

1.11.611

修正了幾個在錄製啟用 AVX 和 AVX512 的程式時可能導致當機的問題。

@$cursession.TTD.Calls() 報告 32 位元組合語言存根的更精確參數資訊。

提升索引器在為大型(數十至數百 GB)的追蹤資料建立索引時的穩定性。 這項改進需要變更索引格式,因此您需要重新建立追蹤資料的索引。

已變更

  • 將 MSDIS 更新到目前版本以取得 Intel APX 支援(1.11.601)。
  • 修正對 PID 為 4 或 8 的處理程序之監控(1.11.595)。

已修正

  • 在 TTD 上下文處理中加入 XSTATE 支援(1.11.609)。
  • 修正了在最新版的 MSVC 和 clang(1.11.607)中遇到的問題。
  • 請確保預設參數類型大小始終正確(1.11.593)。
  • 可在執行時選擇頁面大小的新追蹤檔案格式(1.11.592)。
  • 因應 MSDIS(1.11.591)中的「REX.B + NOP」錯誤。

1.11.553

!tt 沒有引數現在會顯示簡短的說明文字和目前位置 (而不是移至追蹤的開頭)。

新的資料模型方法可讓您查看局部變數值的歷史記錄。 在 Frame 物件中,例如目前框架的 @$curframe,您可以使用 。TTD。VariableHistory() 來取得寫入變數的值的日誌,以及變數保留該值的位置範圍。

  • dx -g @$curframe.TTD.VariableHistory().Variables 顯示區域變數名稱的清單。
  • dx -g @$curframe.TTD.VariableHistory().Variables[n].Values 顯示局部變數 #n 的歷程記錄。

TTD 重播 API 也可在實驗性 SDK 中使用。 此 API 即為偵錯工具用來與 TTD 互動的相同 API,並啟用 .Calls() / .Memory() 來有效地收集資料。 如需詳細資訊,請參閱https://aka.ms/ttdsdk

已修正

  • 修正棄用 ErrorReporting::PrintError (1.11.553) 所導致的當機問題

1.11.532

此版本是維護版本,可改善記錄的穩健性。 此 TTD 發佈恰逢 2025 年 6 月的 Windbg 發佈。 其中一項新功能是位置數據模型對象現在會將百分比報告至追蹤。

已變更

  • 其他基礎結構維護。
  • 使用C++ volatile 的 ISO 標準實作。 (1.11.518)
  • 將百分比添加到位置數據模型的投影。 (1.11.514)

已修正

  • 增加 TTD 處理已譯碼指令的健全性。 (1.11.530)
  • 拿掉模擬器中 XSAVE 的使用,並將內部寄存器傳輸優化。 (1.11.509)

1.11.506

此版本是次要版本,與 2025 年 4 月的 WinDbg 版本同步發佈。

已變更

  • 按兩下數據模型中的 TTD 位置 (例如,在 [模組] 清單中) 會流覽至追蹤中的該位置。 (1.11.492)

    注意:命令視窗在執行下一個步驟或執行命令之前,不會顯示更新的 TTD 位置。

已修正

  • 在附加至 PID 以協助疑難排解時,將進程名稱新增到 .out 檔案中。 (1.11.486)

1.11.481

我們已經改進了「!tt」指令,為您提供更強大的方法來查閱您的追蹤紀錄:

  • 小數百分比可用來縮小搜尋空間(!tt 23.65)
  • 尋找上一次/下一次暫存器變更值(!tt br ebx)
  • 尋找記憶體範圍的上一次/下一次存取時間(!tt ba- [addr] [range])
  • 找出上一次/下一次執行切換到不同模組的時間(!tt bm)
  • 尋找上一次/下一次執行移至特定模組 (!tt bm ntdll)

如需詳細資訊,請參閱 !tt (時間旅行)。

一些值得注意的修正:

  • 在 32 位元追蹤上使用 @$cursession.TTD.Data.Heap() 時,「錯誤:64 位元值在轉換為數字時失去精確度」訊息已消失。
  • 幫助選項解析(-?-help)現在已正確偵測到命令列中的任何位置。
  • dx @$cursession.TTD.Calls() 不再需要位址來比對函式的開頭。 相反地,位址會對應至最接近相符函式的開頭。
  • TTD 使用 vertarget 命令正確報告目標 OS 版本。
  • 使用 「-monitor」 搭配託管服務名稱不再記錄不相關的託管服務。

已新增

  • 在 TTD 追蹤中註冊變更斷點 (1.11.431)

已變更

  • 使用監視模式修正以名稱記錄服務 (1.11.477)
  • 擷取實際目標系統的作系統資訊以供調試程式使用 (1.11.473)
  • 修正模擬器與 CONTEXT 之間的 XMM 暫存器傳輸(1.11.469)
  • 允許對函式內地址進行呼叫查詢 (1.11.459)
  • 支援將符號用作 !tt 命令列中的位址或大小(1.11.454)
  • 改善一致性並擴充 TTD 導航命令的功能 (1.11.453)
  • 在數據損毀的情況下,改善模組 DB 的一致性(1.11.430)

已修正

  • 附加至 PID 時,將程序名稱新增至輸出 (1.11.486)
  • TTD。Data.Heap() 在某些情況下會報告「錯誤:64 位元值在轉換為數字時失去精確度」(1.11.471)
  • 改善啟用了陰影堆疊的過程錄製可靠性(1.11.466)
  • 透過 !tt bm 和數據模型新增模組導覽 (1.11.462)
  • 修正命令列剖析的一些問題。 (1.11.444)
  • 修正 lodsd,以在位址載入雙字(清零 rax 的上半部分)(1.11.434)
  • 修正一些 libfuzzer 錯誤 (1.11.433)

1.11.429

這項 TTD 更新包含一些錯誤修正,以及一些內部變更以改善可靠性。

注意:1.11.410 引進了 Intel/AMD LODSD 指令模擬中的回歸。 此迴歸的修正將在下一個版本中提供。

修正:

  • 改善封包讀取的穩健性,以及其他可提升可靠性的雜項變更。
  • 修正模擬 AVX VBROADCAST[I/F]128 指令時的回歸問題。
  • 修正了在較新的 Windows 建置版本中於 ARM64 上存取例外狀況記錄的問題。

1.11.410

輔助功能改進:進度介面現在可隨文字大小變更正確縮放。

@$cursession.TTD.Calls()調試程式中的 命令現在支援符合大量函式的通配符。 現在可以查詢大量的函式 (@$cursession.TTD.Calls("kernel32!*"))。

自動化:新的 -onMonitorReadyEvent 命令行選項指出錄製監視器 (-monitor switch) 何時準備好錄製新進程。

修正:

  • 在初始化錄製器時修正某些競爭條件。
  • 修正我們記錄系統呼叫的方式,使斷點能正確運作。
  • 修正與模組選擇性錄製相關的多個問題。

ARM64 修正:

  • 已修正一個會導致在純 ARM64v8.0 等級的 CPU 上無法進行 TTD 錄製的錯誤。
  • 已改善在 ARM64 上嘗試使用 x86 或 x64 處理程序追蹤記錄時所顯示的訊息。

AMD/Intel 修正(包括 Google 回報的部分問題):

  • 修復了 LODS 的錯誤模擬:不再將 RAX 的未使用位元歸零,而是正確保留。
  • 修正了 x86/x64 進程中「pop ax」指令的模擬,該指令錯誤地將完整暫存器的上位歸零(例如,「pop ax」清除了 rax 的上位)。
  • XGETBV 指令的直接模擬(更快)。
  • 直接模擬所有 AVX512 SIMD 移動指令(更快)。

1.11.316

已修正一項回歸問題:在錄製包含長時間不中斷且資料量龐大之指令序列的程式時,偶爾會發生當機。

ARM64 修正:

  • 現在支援在已啟用 PAC 功能的 ARM64 程式中錄製。
  • 已修正 ANDS 和 TST 指令,先前這些指令無法清除進位旗標和溢位旗標。

AMD/Intel 修正:

  • 修正了 TTD 誤模擬 「xchg r8,rax」 和 「xchg r8w, ax」 作為 NOP 的錯誤。

1.11.304

TTD 現在會實作並公開發佈 API,以從即時錄製程式內控制錄製器。 您可以在 GitHub 中找到文件和範例。

TTD 現在可以使用新的 -recordMode 參數,在關閉錄製的情況下將自身注入。 根據預設,TTD 會使用 -recordMode Automatic,這會導致記錄所有執行緒。 如果指定了 -recordMode Manual,則 TTD 會插入到目標程序中,但不會記錄任何內容,直到透過 API 呼叫告知它開始記錄。

現在可使用 -module 開關,將錄製限制為一組特定的模組。 在某些情況下,此限制可能會導致記錄速度大幅加快,追蹤檔案也會變小。 可以指定一個以上的 -module 開關。

相對應的記錄與重播元件現已包含在發行套件中。 如果偵錯工具與命令列記錄器之間發生不相容的情況,或出現重播錯誤,在新版偵錯工具發行之前,可先將重播元件複製到偵錯工具的安裝目錄中,作為權宜因應措施。

您可以執行下列命令,在 PowerShell 中找到已安裝的檔案位置:

ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation

已加入

  • 新增 -recordmode 參數以啟用插入而不自動錄製 (1.11.296)
  • 新增 -module 參數,並使用其建立 SR 設定(1.11.291)
  • 由處理中 API 記錄於資料模型中的專案自訂資料(1.11.286)
  • 新增TTDLiveRecorder.dll,並與TTDRecordCPU.dll連接起來(1.11.283)
  • 將重播元件新增到 MSIX,並修正 SDK 查找(1.11.265)

已變更

沒有

已修正

  • 解決 nlohmann JSON 串行化程式中的 Bug ,其用於某些內部工具 (1.11.281)
  • 調整字串對齊以避免罕見的 CRT 錯誤 (1.11.279)
    • 已回報至 VS 和 OS 的程式碼庫,並已在其中修正。
  • 沃森墜機報告的幾個小修正 (1.11.276)
  • 修正可能在某些情況下導致追蹤檔案損毀的回歸問題(1.11.264)

已知問題

  • 在 ARM64 上,編譯器無法尾部呼叫多個高頻函式,在極端情況下,這可能會導致記錄器耗盡堆疊空間並當機。

1.11.261

此版本中值得注意的變更包括:

  • [ARM64] 修正當目的暫存器作為來源使用時,SXTLSQXTN2SQXTUN2UQXTN2XTN2TRN1 指令的行為。
  • [ARM64] 已修正一個問題:該問題會導致偵錯工具將 SIMD 暫存器的低 64 位元重複顯示在高 64 位元中。
  • [AMD64]AMD Zen4 處理器的 AVX512 模擬修正(緩存器已損毀)。

已變更

  • 特別針對模擬器實作新版本系統。 (1.11.260)

已修正

  • 修正目的暫存器同時也作為來源使用的錯誤 ARM64 指令。 (1.11.261)
  • 修正 Zen4 因應措施,以直接返回模擬器。 (1.11.222)

1.11.202

此版本修復了通過 -monitor 切換參數記錄服務或監控進程啟動時遇到的多個問題。 它也會從產品中移除ARM32錄製支援。

已變更

  • 將 TTD 元件連結至 UCRT 做為 DLL,以減少二進位大小。 (1.11.191)

已修正

  • 修正服務的記錄。 (1.11.193)
  • 修正使用 -monitor 時的幾個問題。 (1.11.189)
  • 修正 x64 上執行後援機制時,用於保留非揮發性暫存器之函式的堆疊框架(1.11.188)
  • 重新開啟 TTD 的輸出緩衝處理 (1.11.187)
  • 修正 ProcessMonitorServer 中 GPO 控制代碼的處理方式(1.11.179)

已移除

  • 從存放函式庫移除 ARM32 錄製程式代碼 (1.11.198)

1.11.173

此版本可從 .out 檔案擷取錯誤訊息,並將其列印到主控台,藉以提升特定錯誤訊息的可見度。 也修正了在追蹤重播期間發生的罕見當機問題。

已變更

  • 從 .out 檔案擷取和列印錯誤訊息 (1.11.173)

已修正

  • 修正從個別進程讀取 .out 檔案時的檔案衝突。 (1.11.171)
  • 修正重播追蹤時偶發的當機。 (1.11.166)

1.11.163

此版本新增了在 x64 計算機上錄製 x86 程序的支援。

已變更

  • 修正在安裝 x64 TTD 時的 x86 錄製問題 (1.11.163)

已修正

  • EULA 清理(1.11.161)

1.11.159

此版本是命令行錄製器的第一個公開版本。 除了啟用命令列記錄器公開發行所需的多項變更外,此版本還包含多個錯誤修正,包括對 CPU 模擬器的幾個修正。

新的 -timestampFileName 參數會啟用以時間戳為基礎的 .run 檔案產生。 當您要記錄相同程序的許多實例,並希望將記錄啟動時間降到最低時,此開關非常有用。

已變更

  • 根據使用追蹤器的執行時間選擇預設插入模式 (1.11.156)
  • 新增參數以啟用時間戳型 .run 檔案產生 (1.11.155)
  • 將 EULA 和 -accepteula 新增至 TTD(1.11.154)
  • 將ProcLaunchMon.sys新增至 MSIX (1.11.153)
  • 建立依架構區分的 MSIX 和 MSIXBUNDLE(1.11.152)
  • 修正測試使用 Clang 建置的 TTD 時出現的多個問題。 (1.11.146)
  • TTDAnalyze 的 Clang 修正(1.11.144)

已修正

  • 審閱 appinstaller/正式發行版本(1.11.159)的意見回饋
  • RC 意見回饋 (1.11.157)
  • 將 RegisterInfo 初始化為指向 Sink,以避免破壞 Zero 暫存器。 (1.11.149)
  • 修正帶立即數的 TST 指令,並增強單元測試以涵蓋此情況及更多相關案例。 (1.11.148)
  • 合併受保護的進程決策並停用受保護的進程使用 (1.11.147)

1.11.138

已變更

  • 建立錄製器 MSIX (1.11.138)
  • 修正所有問題,讓 Clang 可以建置 TTD。 (1.11.137)
  • 新增 -monitor X,作為在程序啟動時記錄其執行情況的方式(1.11.116)

已修正

  • 修正 “CMP ZR” ARM64 模擬 (1.11.128)
  • 修正 AMD Zen4 處理器上的 AVX512 模擬 (1.11.127)
  • 修正 TTD 用來尋找特定 CPU 的檔案的機制 (1.11.121)
  • 修正 x86 TTD 回歸問題(TTDRecordCPU.dll 無法載入)(1.11.110)
  • 修正在 ARM64 上返回原生路徑,以不要回收 X28 (1.11.109)

另請參閱

時間移動偵錯 – 概觀

時間移動偵錯 – 命令行錄製器