Time Travel Debugging - 概要

Small time travel logo showing clock.

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

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

TTD を使用すると、バグにつながる条件をより深く理解し、複数回再生して問題を解決する最善の方法を学ぶことができます。 

TTD にはクラッシュ ダンプ ファイルよりも利点があります。多くの場合、最終的なエラーの原因となったコードの実行が欠落しています。

問題を自分で把握できない場合は、同僚とトレースを共有し、見ている内容を正確に確認できます。 これにより、記録された手順は同じであり、アドレスの場所とコード実行が異なる PC で異なるので、ライブ デバッグよりも簡単に共同作業を行うことができます。 また、特定の時点を共有して、同僚がどこから開始するかを把握するのに役立てることもできます。

TTD は効率的であり、トレース ファイルでコード実行をキャプチャするため、できるだけ少ないオーバーヘッドを追加できます。

TTD には、LINQ を使用してトレースを照会できるようにするためのデバッガー データ モデル オブジェクトのセットが含まれています。 たとえば、TTD オブジェクトを使用して、特定のコード モジュールが読み込まれたタイミングを特定したり、すべての例外を検索したりすることができます。

Example screen shot of WinDbg preview showing time travel command and three timelines.

デバッグ ツールの比較

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

アプローチ 長所 短所
ライブ デバッグ 対話型エクスペリエンスは、実行のフローを確認し、ターゲットの状態を変更できます。使い慣れた設定で使い慣れたツールです。 ユーザー エクスペリエンスを中断し、問題を繰り返し再現する作業が必要になる場合があり、運用環境システムのオプションではなく、セキュリティに影響を与える可能性があります。 repro が原因を特定するために障害の時点から元に戻すのが困難です。
ダンプ トリガーに基づいて、事前にコーディングする必要がなく、侵入性が低い。 連続するスナップショットまたはライブ ダンプは、単純な "時間経過" ビューを提供します。 使用しない場合、オーバーヘッドは基本的にゼロです。
テレメトリ & ログ 軽量で、多くの場合、ビジネス シナリオ/ユーザー アクションに関連付けられ、機械学習に優しい。 予期しないコード パス (テレメトリなし) で問題が発生します。 コードに静的にコンパイルされたデータ深度がありません。
タイム トラベル デバッグ (TTD) 複雑なバグに優しく、事前にコーディングする必要はなく、オフラインで反復可能なデバッグ、分析に優しい、すべてをキャプチャします。 レコード時の大きなオーバーヘッド。 必要なデータをさらに収集する場合があります。 データ ファイルが大きくなる可能性があります。

TTD 可用性

TTD は、ストアから WinDbg プレビュー アプリをインストールした後、Windows 10で使用できます。 WinDbg プレビューは、より最新のビジュアル、より高速なウィンドウ、本格的なスクリプト エクスペリエンスを備えた WinDbg の改良版であり、拡張可能なデバッガー データ モデルのサポートが組み込まれています。 ストアから WinDbg プレビューをダウンロードする方法の詳細については、「 WinDbg プレビューを使用したデバッグ」を参照してください。

TTD を使用するために必要な管理者権限

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

ビデオ トレーニング

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

Defrag Tools 185 - Ivette と JamesP は TTD の基本を確認し、WinDbg プレビューで一部の機能をデモします

デフラグ ツール 186 - Jordi と JCAB デモ WinDbg プレビューでの TTD のより優れた機能

CppCon (YouTube) - Jordi、Ken、JamesM が CppCon 2017 の WinDbg プレビューで TTD を発表しました

トレース ファイルの基本

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

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

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

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

記録が停止すると、インデックス (.IDX) ファイルが作成され、トレース情報にすばやくアクセスできます。 また、WinDbg プレビューでトレース ファイルが開かれると、インデックス ファイルも自動的に作成されます。

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

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

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

記録エラーやその他の記録出力は、WinDbg ログ ファイルに書き込まれます。

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

C:\Users\User1\Documents

トレース ファイルの操作の詳細については、「 Time Travel Debugging - トレース ファイルの操作」を参照してください。

以下を参照してください。

ウイルス対策の非互換性

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

メモリ アクセスをブロックしようとするその他のユーティリティも、たとえば Microsoft 拡張軽減エクスペリエンス Toolkitなど、問題になる可能性があります。

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

ユーザー モードのみ

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

読み取り専用再生

時間をさかのぼって移動することはできますが、履歴を変更することはできません。 読み取りメモリ コマンドは使用できますが、メモリを変更または書き込むコマンドを使用することはできません。

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

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

記録のパフォーマンスへの影響

アプリケーションまたはプロセスを記録すると、PC のパフォーマンスに影響します。 実際のパフォーマンスオーバーヘッドは、記録中に実行されるコードの量と種類によって異なります。 一般的な記録シナリオでは、約 10 倍から 20 倍のパフォーマンスヒットが予想されます。 顕著な減速はありませんが、リソースを集中的に使用する操作 (ファイルを開くダイアログなど) の場合は、記録の影響を確認できます。

トレース ファイルのエラー

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

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

最も注目すべき TTD 高度な機能の一部を次に示します。

タイムライン

タイムラインは、実行中に発生するイベントを視覚的に表現することです。 これらのイベントには、ブレークポイント、メモリの読み取り/書き込み、関数の呼び出しと戻り値、例外の場所を指定できます。 タイムラインの詳細については、「 WinDbg プレビュー - タイムライン」を参照してください。

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

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

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

スクリプトのサポート

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

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

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

フィードバックの提供

お客様のフィードバックは、今後のタイム トラベル開発の優先順位を示すのに役立ちます。

  • 実現を希望される機能や問題の原因となっているバグなどのフィードバックがある場合は、フィードバック Hub をご利用ください。

Screen shot of feedback hub showing feedback options including the add new feedback button.

TTD の概要

トレース ファイルの記録と再生、およびトレース ファイルの操作とトラブルシューティングに関する情報については、次のトピックを参照してください。

これらのトピックでは、タイム トラベル デバッグの追加の高度な機能について説明します。