タイム トラベル デバッグ - トレースの記録

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

このセクションでは、タイム トラベル デバッグ (TTD) を記録する方法について説明します。 WinDbg でトレースを記録するには、実行可能ファイルの起動 (詳細)プロセスへのアタッチという 2 つの方法があります。

実行可能ファイルの起動 (詳細)

実行可能ファイルを起動して TTD トレースを記録するには、以下の手順に従います。

  1. WinDbg で、[ファイル]>、[デバッグ開始]>、[実行可能ファイルの起動 (詳細)] の順に選択します。

  2. 記録するユーザー モードの実行可能ファイルへのパスを入力するか、[参照] を選択して実行可能ファイルに移動します。 WinDbg の [実行可能ファイルの起動] メニューの操作については、「WinDbg - ユーザー モード セッションを開始する」を参照してください。

  3. [タイム トラベル デバッグで記録] チェックボックスをオンにして、実行可能ファイルが起動したらトレースが記録されるようにします。

    [実行可能ファイルの起動 (詳細)] 画面のチェックボックスの記録を開始する WinDbg のスクリーンショット。

  4. [構成と記録] を選択すると、トレース ファイルの保存場所を指定できます。

    [参照] ボタンとファイル パスが表示された [記録の構成] ダイアログのスクリーンショット。

  5. 記録を特定のモジュールに制限するには、[実行のサブセットを記録する] をチェックし、モジュール名を入力します。 たとえば、notepad.exe の実行のみを記録する場合は、テキスト ボックスに「notepad.exe」と入力します。 notepad.exe と kernelbase.dll の実行を記録する場合は、テキスト ボックスに「notepad.exe,kernelbase.dll」と入力します。

    実行のレコード サブセットがチェックされている [記録の構成] ダイアログとモジュール リスト テキスト ボックスのスクリーンショット。

  6. [OK] を選択して実行可能ファイルを起動し、記録を開始します。

  7. トレースが記録されていることを示す記録ダイアログが表示されます。

    [停止] ボタン、[デバッグ] ボタン、[キャンセル] ボタンが表示された TTD の記録のポップアップのスクリーンショット。

  8. 記録の詳細については、「記録方法」を参照してください。

プロセスへのアタッチ

プロセスへのアタッチをして TTD トレースを記録するには、以下の手順に従います。

  1. WinDbg で、[ファイル]>、[デバッグ開始]>、[プロセスにアタッチ] の順に選択します。

  2. トレースするユーザー モード プロセスを選択します。 WinDbg の [プロセスへのアタッチ] メニューの操作については、「WinDbg - ユーザー モード セッションを開始する」を参照してください。

    [プロセスにアタッチ] 画面に [チェック ボックスの記録の開始] が表示されている WinDbg のスクリーンショット。

  3. [タイム トラベル デバッグで記録] のチェックボックスをオンにして、実行可能ファイルが起動したらトレースが作成されるようにします。

  4. [アタッチ] を選択して記録を開始します。

  5. トレースが記録されていることを示す記録ダイアログが表示されます。

    [停止] オプション、[デバッグ] オプション、[キャンセル] オプションが表示された TTD の記録のポップアップのスクリーンショット。

  6. 記録の詳細については、「記録方法」を参照してください。

記録方法

  1. プロセスが記録されているので、ここでデバッグする問題を起こす必要があります。 問題のあるファイルを開くか、アプリ内の特定のボタンを選択するかして、関心のあるイベントを起こします。

  2. 記録ダイアログ ボックスが表示されている間は、以下のことができます。

    • [停止してデバッグ] - これを選択すると、記録が停止され、トレース ファイルが作成され、トレース ファイルが開かれるので、デバッグを開始できます。
    • [キャンセル] - これを選択すると、記録は停止され、トレース ファイルが作成されます。 トレース ファイルは後で開くことができます。
  3. 記録が完了したら、アプリを閉じるか、[停止してデバッグ] をクリックします。

    Note

    [停止してデバッグ] でも、[キャンセル] でも、関連付けられているプロセスは終了します。

  4. 記録されているアプリケーションを終了すると、トレース ファイルが閉じられ、ディスクに書き出されます。 これは、プログラムがクラッシュした場合も同様です。

  5. トレース ファイルが開かれると、デバッガーによってトレース ファイルのインデックスが自動的に作成されます。 作成されたインデックスのおかげで、より正確かつ高速にメモリ値を検索できます。 このインデックス作成プロセスは、トレース ファイルが大きいほど時間がかかります。

    ...
    00007ffc`61f789d4 c3              ret
    0:000> !index
    Indexed 1/1 keyframes
    Successfully created the index in 96ms.
    

    Note

    キーフレームとは、インデックス作成に使用されるトレース内の場所です。 キーフレームは自動的に生成されます。 トレースが大きいほど、含まれるキーフレームも多くなります。 トレースのインデックスが作成されると、キーフレームの数が表示されます。

  6. この時点でトレース ファイルの先頭に移動され、時間を進めたり遡ったりできるようになっています。

    ヒント

    ブレークポイントの使用は、関心のあるイベントでコードの実行を一時停止する一般的な方法です。 TTD 独自の機能として、ブレークポイントを設定し、トレースが記録された後にそのブレークポイントに到達するまで時間を遡ることができます。 問題の発生後にプロセスの状態を調査し、ブレークポイントの最適な場所を決定する機能により、追加のデバッグ ワークフローが可能になります。 過去にブレークポイントを使用した例については、「タイム トラベル デバッグ - サンプル アプリのチュートリアル」を参照してください。

次のステップ

これで TTD トレースが記録されたので、トレースを再生したり、トレース ファイルを操作 (同僚と共有するなど) したりできます。 詳細については、これらのトピックを参照してください。

Time Travel Debugging - トレースの再生

Time Travel Debugging - トレース ファイルの使用

Time Travel Debugging - トラブルシューティング

Time Travel Debugging - サンプル アプリのチュートリアル

参照

Time Travel Debugging - 概要