次の方法で共有


Time Travel Debugging - 概要

時計を特徴とするタイム トラベル デバッグロゴのスクリーンショット。

タイム トラベル デバッグとは

Time Travel Debugging (TTD) は、プロセスの実行時にプロセスのトレースをキャプチャし、後で前後に再生するツールです。 TTD は、バグが見つかるまで問題を再現する必要なく、デバッガー セッションを "巻き戻す" ことで問題をデバッグするのに役立ちます。

TTD を使用することで、過去を遡ってバグに至った状況をよりよく理解でき、何度も再生してその問題を解決するための最善の方法を学習できます。

TTD にはクラッシュ ダンプ ファイルよりも優れた利点があり、最終的な障害の原因となった状態と実行パスを見逃すことがよくあります。

問題を自分で把握できない場合は、同僚とトレースを共有して、見ているものを正確に確認できます。 この機能を使用すると、ライブ デバッグよりもコラボレーションが容易になります。記録された命令は同じですが、アドレスの場所とコードの実行は PC によって異なります。 また、同僚がどこから着手すればよいのかを把握できるように、特定の時点を共有することできます。

TTD は効率的であり、トレース ファイル内のコード実行をキャプチャする限り、オーバーヘッドをできるだけ少なくするために機能します。

TTD には、LINQ を使用してトレースのクエリを実行するために使用できる一連のデバッガー データ モデル オブジェクトが含まれています。 たとえば、TTD オブジェクトを使用して、特定のコード モジュールが読み込まれたタイミングを特定したり、すべての例外を見つけたりできます。

Time Travel Debugging コマンドと 3 つのタイムラインを含む WinDbg のスクリーンショット。

要件

Time Travel Debugging は WinDbg と統合され、シームレスな記録と再生エクスペリエンスを提供します。

TTD を使用するには、昇格されたアクセス許可でデバッガーを実行する必要があります。 管理者特権を持つアカウントを使用して WinDbg をインストールし、デバッガーで記録するときにそのアカウントを使用します。 管理者特権でデバッガーを実行するには、[スタート] メニューの WinDbg アイコンを長押し (または右クリック) し、[管理者として実行] >選択します。

リリース ノート

TTD は進化を続けています。 最新の情報については、「 タイム トラベル デバッグのリリース ノート」を参照してください。

記録を含む作成されたトレース ファイルには、ファイル パス、レジストリ、メモリ、またはファイルの内容など、個人を特定できる情報やセキュリティ関連の情報が含まれている場合があります。ただし、必ずしもこれらに限定されるわけではありません。 正確な情報は、記録中のターゲット プロセス アクティビティによって異なります。 記録ファイルを他のユーザーと共有する場合は、この点に注意してください。

TTD.exe コマンド ライン記録ユーティリティ

トレースの記録には WinDbg UI でなく、TTD.exe コマンド ライン ユーティリティを使用することもできます。

TTD コマンド ライン レコーダーのみが必要となるシナリオもあり得ます (デバッガーをインストールしない状態での PC への記録、高度な記録シナリオ、テスト自動化など)。これらのシナリオでは、URL を介して TTD コマンド ライン レコーダーのみをインストールできます。 詳細については、「タイム トラベル デバッグ - TTD.exe コマンド ライン ユーティリティ」を参照してください。

デバッグ ツールの比較

次の表は、利用可能なさまざまなデバッグ ソリューションの長所と短所をまとめたものです。

アプローチ 長所 デメリット
ライブ デバッグ 対話型エクスペリエンス、実行フローの確認、ターゲット状態の変更が可能で、使い慣れたツールを使い慣れた環境で使用できます。 ユーザー エクスペリエンスを中断して問題を繰り返し再現する作業が必要になる場合があり、セキュリティに影響する可能性があるので、実稼働システムでは常に選択できるとは限りません。 再現では、エラー発生時点から遡って原因を特定するのは困難です。
ダンプ 事前のコーディングが不要で、割り込みが少なく、トリガーに基づきます。 連続するスナップショットまたはライブ ダンプは、単純な "時間の経過と伴う" ビューを提供します。 使用しない場合のオーバーヘッドは基本的にゼロです。
テレメトリ & ログ 軽量で、多くの場合ビジネス シナリオやユーザー操作に関連付けられ、機械学習との相性に優れます。 予期しないコード パス (テレメトリなし) で問題が発生します。 データの深さに欠け、コードへ静的にコンパイルされます。
タイム トラベル デバッグ (TTD) 複雑なバグに強く、事前のコーディングが不要で、オフラインでデバッグを反復可能で、分析しやすく、何でもキャプチャできます。 記録時に大きなオーバーヘッドが生じます。 必要以上のデータが収集される場合があります。 データ ファイルが大きくなる可能性があります。

ビデオ トレーニング

TTD の詳細については、次のビデオを参照してください。

デフラグ ツール 185 - Ivette と James による TTD の基礎に関する解説と WinDbg のいくつかの機能のデモ

デフラグ ツール 186 - Jordi と JCAB による WinDbg が搭載するその他の優れた TTD 機能のデモ

CppCon (YouTube) - Jordi、Ken、JamesM が CppCon 2017 で WinDbg で TTD を発表しました

トレース ファイルの基礎

トレース ファイルのサイズ

トレース ファイルが大きくなる可能性があります。 十分な空き領域があることを確認する必要があります。 ほんの数分間でもプログラムを記録すると、トレース ファイルがあっという間に数ギガバイトに達する可能性もあります。 TTD では、複雑な実行時間の長いシナリオを可能にするトレース ファイルの最大サイズは設定されません。 問題をすばやく再作成すると、トレース ファイルのサイズができるだけ小さくなります。

トレース ファイルとインデックス ファイル

トレース ファイル (.run) には、記録中のコード実行が格納されます。

記録を停止すると、トレース情報へのアクセスを最適化するためのインデックス ファイル (.idx) が作成されます。 WinDbg では、トレース ファイルを開いたときにインデックス ファイルも自動的に作成されます。

インデックス ファイルのサイズは、通常トレース ファイルの 2 倍の大きさにすることができます。

!tt.index コマンドを使用して、トレース ファイルからインデックス ファイルを再作成できます。

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

記録エラーとその他の記録出力は、WinDbg ログ ファイルに移動します。

すべての出力ファイルは、構成した場所に格納します。 既定の場所は、ユーザーのドキュメント フォルダーにあります。 たとえば、User1 の場合、TTD ファイルはここに格納されます。

C:\Users\User1\Documents

トレース ファイルの操作の詳細については、「 タイム トラベル デバッグ - トレース ファイルの操作」を参照してください。

注意事項

ウイルス対策との非互換性

TTD がプロセスにフックして記録する方法が原因で、非互換性が発生する可能性があります。 通常、システム メモリ呼び出しの追跡とシャドウを試みるウイルス対策またはその他のシステム ソフトウェアで問題が発生します。 アクセス許可が不十分なメッセージなど、記録に関する問題が発生した場合は、ウイルス対策ソフトウェアを一時的に無効にしてみてください。

メモリ アクセスをブロックしようとする他のユーティリティも問題になる可能性があります。 たとえば、Microsoft Enhanced Mitigation Experience Toolkit です。

TTD と競合する環境のもう 1 つの例は、Electron アプリケーション フレームワークです。 この場合、トレースが記録される可能性がありますが、記録されるプロセスのデッドロックまたはクラッシュも発生する可能性があります。

ユーザー モード限定

TTD では現在、ユーザー モード操作のみがサポートされているため、カーネル モード プロセスをトレースすることはできません。

読み取り専用再生

時間を遡ることができますが、履歴は変更できません。 メモリを読み取るコマンドは使用できますが、メモリを変更したりメモリに書き込んだりするコマンドは使用できません。

システムで保護されたプロセス

保護されたプロセス ライト (PPL) プロセスなど、一部の Windows システムで保護されたプロセスが保護されています。 TTD は、コード実行の記録を許可するために、保護されたプロセスに自身を挿入することはできません。

記録がパフォーマンスに及ぼす影響

アプリケーションやプロセスを記録すると、PC のパフォーマンスに影響します。 実際のパフォーマンスオーバーヘッドは、記録中に実行されるコードの量と種類によって異なります。 一般的な記録シナリオでは、パフォーマンスへの影響が約 10 倍から 20 倍になることが見込まれます。 UI に顕著な速度低下がない場合があります。 ただし、[ファイルを開く] ダイアログなどのリソースを集中的に使用する操作では、記録の影響が表示されます。

トレース ファイル エラー

トレース ファイル エラーが発生する可能性があります。 詳細については、「タイム トラベル デバッグ - トラブルシューティング」を参照してください。

タイム トラベル デバッグの高度な機能

タイムライン

タイムラインは、実行中に発生するイベントをビジュアル的に表現したものです。 イベントとして表示される場所は、ブレークポイント、メモリの読み取り/書き込み、関数の呼び出しと戻り、例外などがあり得ます。 タイムラインの詳細については、「WinDbg - タイムライン」を参照してください。

デバッガー データ モデルのサポート

  • 組み込みデータ モデルのサポート - TTD はデータ モデルをサポートしています。 LINQ クエリを使用したアプリケーション エラーの分析は、強力なツールになる可能性があります。 WinDbg のデータ モデル ウィンドウを使用すると、展開可能で拡張可能なバージョンの dxdx -gを操作でき、NatVis、JavaScript、LINQ クエリを使用してテーブルを作成できます。

デバッガー データ モデルの一般的な情報については、「WinDbg - データ モデル」を参照してください。 TTD デバッガー オブジェクト モデルの操作の詳細については、「タイム トラベル デバッグ - タイム トラベル デバッグ オブジェクトの概要」を参照してください。

スクリプトのサポート

JavaScript と NatVis の操作に関する一般的な情報については、「WinDbg - スクリプト」を参照してください。

TTD.exe コマンド ライン ユーティリティ

TTD.exe コマンド ライン ユーティリティでトレースを記録できます。 詳細については、「タイム トラベル デバッグ - TTD.exe コマンド ライン ユーティリティ」を参照してください。

マネージド コード TTD のサポート

64 ビット モードで実行されている SOS デバッグ拡張機能 (sos.dll) を使用して、WinDbg の TTD を使用してマネージド コードをデバッグできます。 詳細については、「Windows デバッガーを使用したマネージド コードのデバッグ」を参照してください。

TTD の使用を開始する

ここから始める

TTD を初めて使用する場合は、次のラーニング パスに従います。

  1. トレースを記録する - 最初の実行トレースをキャプチャする
  2. トレースを再生する - 記録を見直して分析する
  3. サンプル アプリのチュートリアル - ステップ バイ ステップデバッグの例

ヘルプが必要ですか?

高度な機能