タイム トラベル デバッグ - トレース ファイルの操作

Small time travel logo showing clock.

このセクションでは、タイム トラベル デバッグによって作成および使用されるファイルを操作する方法について説明します。

トレース ファイルの概要

タイム トラベル デバッグでは、次のファイルを使用してコードの実行をデバッグします。

  • トレース ファイルには、コード実行の記録が含まれており、..拡張機能を実行します。

  • インデックス ファイルを使用すると、トレース ファイル内の情報にすばやくアクセスでき、.IDX 拡張機能。

  • 記録エラーとその他の記録出力は、デバッガー ログ ファイルに書き込まれます。

トレース。RUN ファイル

トレース。RUN ファイルは、FileStart>debuggingOpen>トレース ファイルを使用して記録された後に開くことができます。

File open options showing open trace option highlighted.

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

C:\Users\User1\Documents

記録を開始するときにトレース ファイルの場所を変更できます。 詳細については、「 タイム トラベル デバッグ - 記録」を参照してください。

最近使用したファイルの一覧を使用すると、以前に使用したターゲット構成ファイルにすばやくアクセスできます。 最近使用したトレース ファイルまたはダンプ ファイルも一覧表示されます。

File open list of .run trace files showing five recently used trace files.

インデックス。IDX ファイル

インデックス。関連付けられたトレース用に IDX ファイルが作成されます。WinDbg プレビューでトレース ファイルを開くと、ファイルが自動的に実行されます。 !index コマンドを使用して、インデックス ファイルを手動で作成できます。 インデックスを使用すると、トレース情報にすばやくアクセスできます。

IDX ファイルは、通常、サイズの 2 倍の大きさにすることもできます。RUN ファイル。

を再作成します。IDX ファイル

を再作成できます。から IDX ファイルを取得します。コマンドを使用してファイルを !index 実行します。 詳細については、「 タイム トラベル デバッグ - !index (タイム トラベル)」を参照してください。

0:0:001> !index
Indexed 3/3 keyframes
Successfully created the index in 49ms.

TTD トレースの共有。RUN ファイル

TTD はローカルのみであり、別のコンピューターにリモート接続しても機能しません。

TTD トレース ファイルをコピーすることで、他のユーザーと共有できます。RUN ファイル。 これは、同僚が問題を把握するのに役立ちます。 クラッシュしているアプリをインストールしたり、他の関連するセットアップを行って問題を再現したりする必要はありません。 トレース ファイルを読み込み、PC にインストールされているかのようにアプリをデバッグできます。

TTD トレースを再生するマシンは、レコード マシンで使用されたすべての命令 (AVX 命令など) をサポートする必要があります。

ファイルの名前を変更して、日付やバグ番号などの追加情報を含めることができます。

次の値を使用します。IDX ファイルは、上記のように !index コマンドを使用して再作成できるため、コピーする必要はありません。

ヒント

他のユーザーと共同作業する場合は、問題に関連する関連するトレース位置を渡します。 コラボレーターは、このコマンドを !tt x:y 使用して、コードの実行中の正確な時点に移動できます。 バグの説明に時間位置範囲を含めて、考えられる問題が発生している可能性のある場所を追跡できます。

エラー - ログ ファイル

記録エラーとその他の記録出力は、デバッガー ログ ファイルに書き込まれます。 ログ ファイルを表示するには、[ViewLogs>] を選択します。

この例では、C:\Windows ディレクトリにない Foo.exe という名前の実行可能ファイルを起動して記録しようとするときのエラー ログ テキストを示します。

2017-09-21:17:18:10:320 : Information : DbgXUI.dll : TTD: Output: 
Microsoft (R) TTD 1.01.02
Release: 10.0.16366.1000
Copyright (C) Microsoft Corporation. All rights reserved.
Launching C:\Windows\Foo.exe
2017-09-21:17:18:10:320 : Error : DbgXUI.dll : TTD: Errors: 
Error: Trace of C:\Windows\Foo.exe PID:0 did not complete successfully: status:27
Error: Could not open 'Foo.exe'; file not found.
Error: Corrupted trace dumped to C:\Users\User1\Documents\Foo01.run.err.

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

TTD トレース ファイルは非常に大きくなる可能性があり、十分な空きディスク領域を確保することが重要です。 アプリまたはプロセスを数分だけ記録した場合でも、トレース ファイルのサイズは数ギガバイトに増える可能性があります。 トレース ファイルのサイズは、以下に示すさまざまな要因によって異なります。

TTD では、実行時間の長い複雑なシナリオに対応するために、トレース ファイルの最大サイズは設定されません。 問題をすばやく再作成すると、トレース ファイルのサイズは可能な限り小さく維持されます。

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

トレース ファイルのサイズを正確に見積もることはできませんが、TTD ファイル サイズを理解するのに役立つ経験則がいくつかあります。

トレース ファイルのサイズには、次の要因が影響を与える可能性があります。

  • 実行中のアプリまたはプロセスを記録するときにすべてのスレッドで実行されるコード命令の数
  • アプリまたはプロセスが記録された時間 (記録されたコード命令の数に影響を与える場合のみ)
  • アプリまたはプロセスで使用されるメモリ データのサイズ

実行および記録される命令の数は、トレース ファイルのサイズに影響を与える最大の要因です。 トレースには、通常、実行される命令ごとに 1 ビットから 1 バイトの間が必要です。 記録されたプログラムが少数の個別の関数を実行し、より小さなデータ セットで動作する場合、トレースはその範囲の下端に向かう可能性があります。 記録されたプログラムが多数の個別の関数を実行する場合や、より大きなデータセットで動作する場合、トレースはその範囲の上限に向かう可能性があります。

トレース ファイル サイズの経験則

トレース ファイルは、アクティブなアプリまたはプロセスを記録するときに、上で識別されたトレース ファイルサイズの要因に応じて、1 秒あたり約 5 MB から 50 MB に増加します。

記録されるアプリまたはプロセスがアイドル状態の場合 (入力を待っている場合など) は、トレース ファイルは拡張されません。

現在、トレース ファイルの最大ファイル サイズ制限はありません。 WinDbg プレビューでは、数百ギガバイトのサイズに十分なトレース ファイルを再生できます。

インデックス ファイルのサイズ

初めてトレースを開くと、WinDbg Preview によってインデックス ファイルが自動的に作成されます。 デバッガーがトレースを再生し、メモリに関する情報をより効率的に照会するのに役立つ情報が含まれています。 通常、そのサイズの範囲はトレース ファイルのサイズの 1 ~ 2 倍です。 そのサイズに影響を与える要因は、トレース ファイルのサイズに影響を与える要因と似ています。

まず、インデックス ファイルのサイズは、トレースの長さに対して相対的にスケーリングされます。 記録された命令の数が多いトレースでは、通常、インデックスが大きくなります。

次に、インデックスのサイズは、メモリ アクセスの幅に対して相対的にスケーリングされます。 頻繁に記録されたプログラムが多数の個別のメモリ位置にアクセスする場合、通常、インデックスは、記録されたプログラムのアクセス頻度が異なるメモリの場所が少ない場合や、メモリの場所へのアクセス頻度が低い場合よりも大きくなります。

これらの要因はトレース ファイルのサイズに影響を与える要因に似ているため、インデックス ファイルのサイズは通常、インデックス ファイルのサイズに対して相対的にスケーリングされます (したがって、通常はトレース ファイルのサイズの 1 倍から 2 倍のサイズであると推定されます)。

ディスク領域が不足した場合はどうすればよいでしょうか。

TTD トレース ファイルとインデックス ファイルの両方がディスクに書き込まれます。 現時点では、トレース ファイルまたはインデックス ファイルの最大ファイル サイズの制限はありません。 トレース ファイルのサイズは、記録を停止するか、使用可能なディスク領域の量を超えるまで大きくなります。

録音中: TTD はトレース ファイルに最後のページを書き込み、もう一度書き込むことができるまで実質的に待機します。 WinDbg は記録ダイアログを表示し続けますが、記録中にディスク領域が不足してもエラー/警告メッセージは表示されません。

記録中にディスク領域が不足すると、コード実行の不完全なレコードを含むトレース ファイルが作成されます。 不完全なトレース ファイルは WinDbg プレビューで開くことができますが、トレース ファイルの書き込み時にディスク領域が不足した後にエラーが発生した場合は、実際の問題が含まれていない可能性があります。

回避策: エクスプローラー開き、ディスク (C: ドライブ) の空き領域が 0 に近いかどうかを確認します。 または、トレースを監視します (.RUN) ファイルをエクスプローラー (ドキュメント フォルダーの既定値) で、サイズが定期的に増加していない場合は、記録が待機している可能性があります。 WinDbg の [停止とデバッグ] ボタンを選択し、空き領域を増やすか、別のディスクに保存して、もう一度記録を開始します。

インデックス作成中: デバッガーで無効なインデックス ファイルが生成され、デバッガーで予期しない動作が発生したり、デバッガー エンジン ホストがクラッシュしたりする可能性があります。

回避策: デバッガーを閉じ、トレースに存在する可能性があるインデックス ファイル (.idx) を削除します。 十分なディスク領域を解放するか、十分な空き領域がある別のディスクにトレース ファイルを移動します。 デバッガーでトレースをもう一度開き、!index を実行して新しい正しいインデックスを作成します。 インデックス作成では元のトレース ファイル (.run) は変更されないため、データは失われません。

参照

Time Travel Debugging - 概要