このトピックでは、タイム トラベル デバッグの新機能について説明します。
1.11.506
これは、WinDbg の 2025 年 4 月のリリースと一致するマイナー リリースです。
変更済
データ モデルの 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) に移動する前または次の時間を検索する
詳細については、ドキュメントを参照 してください。
いくつかの注目すべき修正:
- 32 ビット トレースで
@$cursession.TTD.Data.Heap()
を使用すると、"エラー: 64 ビット値が数値への変換の精度を失う" というメッセージが表示されます。 - ヘルプ オプションの解析 (
-?
、-help
) が、コマンド ライン内の任意の場所で正しく検出されるようになりました。 -
dx @$cursession.TTD.Calls()
では、アドレスが関数の先頭と一致する必要がなくなりました。 代わりに、アドレスは、最も近い一致する関数の先頭にマップされます。 - TTD は、vertarget コマンドからターゲット OS バージョンを正しく報告します。
- ホストされたサービス名で "-monitor" を使用しても、関連のないホステッド サービスが記録されなくなりました。
追加
- TTD トレースに変更ブレークポイントを登録する (1.11.431)
変更済
- モニターモードを用いてサービスを名前で記録することを修正する (1.11.477)
- デバッガーで使用するために実際のターゲット システムの OS 情報をキャプチャする (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 を修正し、アドレスで doubleword を読み込み、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
アクセシビリティの向上: 進行状況 UI が、テキスト サイズの変更に応じて適切に拡大縮小されるようになりました。
デバッガーの @$cursession.TTD.Calls()
コマンドで、多数の関数に一致するワイルドカードがサポートされるようになりました。
多数の関数 (@$cursession.TTD.Calls("kernel32!*")
) のクエリを実行できるようになりました。
自動化: 新しい -onMonitorReadyEvent
コマンド ライン オプションは、記録モニター (-monitor
スイッチ) で新しいプロセスを記録する準備ができたときに、そのことを示します。
修正:
- レコーダーの初期化中に発生する競合状態を修正しました。
- ブレークポイントが正しく動作するように、syscall の記録方法を修正しました。
- モジュール選択記録に関連する複数の問題を修正しました。
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 シリアライザーのバグを回避 (1.11.281)
- まれに発生する CRT バグを回避するために文字列の配置を調整 (1.11.279)
- VS と OS のコードベースで報告、修正されました。
- Watson クラッシュ レポートから、いくつかの小さな修正 (1.11.276)
- 一部のケースでトレース ファイルの破損を引き起こす可能性がある回帰を修正 (1.11.264)
既知の問題
- ARM64 では、コンパイラが頻度の高い関数の多くで末尾呼び出しに失敗しており、極端なケースでは、そのことが原因でレコーダーのスタック領域が不足し、クラッシュする可能性があります。
1.11.261
このリリースの主な変更点は次のとおりです。
- [ARM64] 記録先レジスタがソースとして使用される場合の
SXTL
、SQXTN2
、SQXTUN2
、UQXTN2
、XTN2
、TRN1
の命令の動作を修正。 - [ARM64] 下位 64 ビットが上位 64 ビットと重複している SIMD レジスタがデバッガーに表示される原因となった問題を修正。
- [AMD64] AMD の Zen4 プロセッサの AVX512 エミュレーション修正 (レジスタが破損していました)。
変更済
- エミュレーター専用の新しいバージョン管理システムを実装。 (1.11.260)
固定
- 記録先レジスタがソースとしても使用される、ARM64 命令の障害を修正。 (1.11.261)
- エミュレーターへの直接的な戻りに関する Zen4 回避策を修正。 (1.11.222)
1.11.202
このリリースでは、サービスの記録中、または -monitor
スイッチを使用したプロセスの起動の監視中に発生するさまざまな問題が修正されます。 ARM32 記録サポートも製品から削除されます。
変更済
- TTD コンポーネントを DLL として UCRT にリンクすることで、バイナリ サイズを削減。 (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) - MSIX に ProcLaunchMon.sys を追加 (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 を初期化してシンクを指すようにし、ゼロ レジスタをごみ箱に入れることを回避。 (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)
- X28 をごみ箱に入れないように、ARM64 上のネイティブ パスへの戻りを修正 (1.11.109)