タイム トラベル デバッグ - トレースの記録
このセクションでは、タイム トラベル デバッグ (TTD) を記録する方法について説明します。 WinDbg でトレースを記録するには、実行可能ファイルの起動 (詳細) と プロセスへのアタッチという 2 つの方法があります。
実行可能ファイルの起動 (詳細)
実行可能ファイルを起動して TTD トレースを記録するには、以下の手順に従います。
WinDbg で、[ファイル]>、[デバッグ開始]>、[実行可能ファイルの起動 (詳細)] の順に選択します。
記録するユーザー モードの実行可能ファイルへのパスを入力するか、[参照] を選択して実行可能ファイルに移動します。 WinDbg の [実行可能ファイルの起動] メニューの操作については、「WinDbg - ユーザー モード セッションを開始する」を参照してください。
[タイム トラベル デバッグで記録] チェックボックスをオンにして、実行可能ファイルが起動したらトレースが記録されるようにします。
[構成と記録] を選択すると、トレース ファイルの保存場所を指定できます。
記録を特定のモジュールに制限するには、[実行のサブセットを記録する] をチェックし、モジュール名を入力します。 たとえば、notepad.exe の実行のみを記録する場合は、テキスト ボックスに「notepad.exe」と入力します。 notepad.exe と kernelbase.dll の実行を記録する場合は、テキスト ボックスに「notepad.exe,kernelbase.dll」と入力します。
[OK] を選択して実行可能ファイルを起動し、記録を開始します。
トレースが記録されていることを示す記録ダイアログが表示されます。
記録の詳細については、「記録方法」を参照してください。
プロセスへのアタッチ
プロセスへのアタッチをして TTD トレースを記録するには、以下の手順に従います。
WinDbg で、[ファイル]>、[デバッグ開始]>、[プロセスにアタッチ] の順に選択します。
トレースするユーザー モード プロセスを選択します。 WinDbg の [プロセスへのアタッチ] メニューの操作については、「WinDbg - ユーザー モード セッションを開始する」を参照してください。
[タイム トラベル デバッグで記録] のチェックボックスをオンにして、実行可能ファイルが起動したらトレースが作成されるようにします。
[アタッチ] を選択して記録を開始します。
トレースが記録されていることを示す記録ダイアログが表示されます。
記録の詳細については、「記録方法」を参照してください。
記録方法
プロセスが記録されているので、ここでデバッグする問題を起こす必要があります。 問題のあるファイルを開くか、アプリ内の特定のボタンを選択するかして、関心のあるイベントを起こします。
記録ダイアログ ボックスが表示されている間は、以下のことができます。
- [停止してデバッグ] - これを選択すると、記録が停止され、トレース ファイルが作成され、トレース ファイルが開かれるので、デバッグを開始できます。
- [キャンセル] - これを選択すると、記録は停止され、トレース ファイルが作成されます。 トレース ファイルは後で開くことができます。
記録が完了したら、アプリを閉じるか、[停止してデバッグ] をクリックします。
Note
[停止してデバッグ] でも、[キャンセル] でも、関連付けられているプロセスは終了します。
記録されているアプリケーションを終了すると、トレース ファイルが閉じられ、ディスクに書き出されます。 これは、プログラムがクラッシュした場合も同様です。
トレース ファイルが開かれると、デバッガーによってトレース ファイルのインデックスが自動的に作成されます。 作成されたインデックスのおかげで、より正確かつ高速にメモリ値を検索できます。 このインデックス作成プロセスは、トレース ファイルが大きいほど時間がかかります。
... 00007ffc`61f789d4 c3 ret 0:000> !index Indexed 1/1 keyframes Successfully created the index in 96ms.
Note
キーフレームとは、インデックス作成に使用されるトレース内の場所です。 キーフレームは自動的に生成されます。 トレースが大きいほど、含まれるキーフレームも多くなります。 トレースのインデックスが作成されると、キーフレームの数が表示されます。
この時点でトレース ファイルの先頭に移動され、時間を進めたり遡ったりできるようになっています。
ヒント
ブレークポイントの使用は、関心のあるイベントでコードの実行を一時停止する一般的な方法です。 TTD 独自の機能として、ブレークポイントを設定し、トレースが記録された後にそのブレークポイントに到達するまで時間を遡ることができます。 問題の発生後にプロセスの状態を調査し、ブレークポイントの最適な場所を決定する機能により、追加のデバッグ ワークフローが可能になります。 過去にブレークポイントを使用した例については、「タイム トラベル デバッグ - サンプル アプリのチュートリアル」を参照してください。
次のステップ
これで TTD トレースが記録されたので、トレースを再生したり、トレース ファイルを操作 (同僚と共有するなど) したりできます。 詳細については、これらのトピックを参照してください。
Time Travel Debugging - トレースの再生
Time Travel Debugging - トレース ファイルの使用
Time Travel Debugging - トラブルシューティング
Time Travel Debugging - サンプル アプリのチュートリアル