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

時計を特徴とするタイム トラベル デバッグのロゴ。

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

トレース ファイルの概要

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

  • コード実行の記録が含まれているトレース ファイル (拡張子は .run)。

  • トレース ファイル内の情報にすばやくアクセスするためのインデックス ファイル (拡張子は .idx)。

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

.run トレース ファイル

.run トレース ファイルは、記録後に [ファイル]>[デバッグ開始]>[Open trace file] (トレース ファイルを開く) で開くことができます。

[トレース ファイルを開く] オプションが強調表示されている、ファイルを開くオプションのスクリーンショット。

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

C:\Users\User1\Documents

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

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

最近使用した 5 つの .run トレース ファイルを表示する、ファイルを開く一覧のスクリーンショット。

.idx インデックス ファイル

.idx インデックス ファイルは、WinDbg で .run トレース ファイルを開いたときに、そのトレース ファイルと関連付けられるかたちで自動的に作成されます。 !index コマンドを使用すれば、インデックス ファイルを手動で作成できます。 インデックスを使用することで、トレース情報へのアクセスを高速化できます。

.idx ファイルも大きくなる可能性があり、通常は .run ファイルの 2 倍の大きさになります。

.idx ファイルを再作成する

.run ファイルから .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 コマンド使用して、その正確なコード実行時点に移動できます。 問題が発生している可能性がある場所を追跡するために、バグの説明に時間位置の範囲を含めることができます。

エラー - ログ ファイル

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

下に掲載しているのは、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 によって自動的に作成されます。 トレースの再生とメモリに関する情報の照会を効率化するのに役立つ情報が含まれています。 通常そのサイズは、トレース ファイルの 1 倍から 2 倍になります。 サイズに影響する要因は、トレース ファイルのサイズに影響する要因と似ています。

まず、インデックス ファイルのサイズは、トレースの長さに比例して増減します。 記録される命令の数が多いトレースでは、一般的にインデックスも大きくなります。

次に、インデックスのサイズは、メモリ アクセスの範囲に比例して増減します。 記録対象のプログラムで、さまざまなメモリ位置へのアクセスが頻繁に発生する場合には、限られたメモリ位置へのアクセスしか発生しない場合や、アクセス頻度が低い場合よりも、普通はインデックスが大きくなります。

これらの要因はトレース ファイルのサイズに影響する要因に似ているため、インデックス ファイルのサイズは通常、インデックス ファイルのサイズに比例して増減します (つまり通常はトレース ファイルの 1 倍から 2 倍のサイズになると推定されます)。

ディスク領域が不足した場合

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

記録中: TTD は最後のページをトレース ファイルに書き込み、再度書き込めるようになるまで有効な状態で待機します。 WinDbg には記録ダイアログが引き続き表示されますが、記録中にディスク領域不足になってもエラー/警告メッセージは表示されません。

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

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

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

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

参照

Time Travel Debugging - 概要