Time Travel Debugging - トラブルシューティング
このセクションでは、タイム トラベル トレースのトラブルシューティングを行う方法について説明します。
プロセス記録の試行に関する問題
"WinDbg must be run elevated to support Time Travel Debugging (タイム トラベル デバッグをサポートするには WinDbg を管理者特権で実行する必要があります)" というエラー メッセージが表示される
メッセージで示されているように、デバッガーを管理者特権で実行する必要があります。 デバッガーを管理者特権で実行するには、[スタート] メニューの WinDbg アイコンを右クリックし、[その他]> [管理者として実行] の順に選択します。
管理者特権を持たないアカウントで WinDbg をインストールすると、"WinDbg は、タイム トラベル デバッグをサポートするために管理者特権で実行する必要があります" というエラー メッセージが表示される
管理者特権を持つアカウントを使用して WinDbg を再インストールし、デバッガーで記録するときには、そのアカウントを使用します。
UWP アプリケーションの起動と記録ができない
現時点では UWP アプリケーションの起動と記録はサポートされていませんが、既に実行されている UWP アプリケーションにアタッチして記録することはできます。
別のセッション、セキュリティ コンテキスト、資格情報で実行されている、通常とは異なるプロセスの種類を記録できません。
現時点では、TTD で記録されるのは、普通にコマンド コンソールから起動できる、または Windows エクスプローラーで実行可能ファイルかショートカットをクリックして起動できる通常のプロセスのみです。
コンピューターにアプリケーションを正常に記録できない
アプリケーションの記録に失敗する場合は、単純な Windows プロセスを記録できるかを確認します。 たとえば "ping.exe" や "cmd.exe" は、通常は記録できる単純なプロセスです。
コンピューターに何も正常に記録できない
TTD の記録は、侵入型技術です。アプリケーション仮想化フレームワーク、情報管理製品、セキュリティ ソフトウェア、ウイルス対策製品といった他の侵入型技術に干渉する可能性があります。
既知の TTD の非互換性については、「タイム トラベル デバッグ - 概要」の「注意すべき点」を参照してください。
アプリケーションのトレースと同時に AppVerifier を実行していると、トレースを再生するときにパフォーマンスが低下する
AppVerifier がメモリを使用してアプリケーションをチェックする方法が原因で、後でトレースを再生するときのエクスペリエンスが、AppVerifier を使用しない場合よりも著しく悪化する可能性があります。 パフォーマンスを改善するには、アプリケーションを記録するときに AppVerifier を無効にしてください。 これが不可能な場合は、パフォーマンス改善のために WinDbg の [呼び出し履歴] ウィンドウを閉じてみてください。
.idx インデックス ファイルに関する問題
インデックス ファイルのないトレース ファイルや、インデックス ファイルが破損している、または不完全なトレース ファイルのデバッグは可能ですが、推奨されません。 インデックス ファイルは、デバッグされたプロセスから読み取られたメモリ値が最も正確であることを確認し、他のすべてのデバッグ操作の効率性を高めるために必要です。
.run トレース ファイルに関連付けられた .idx インデックス ファイルの状態を確認するには、!index -status
コマンドを使用します。
インデックス ファイルを再作成する場合は、!index -force
を実行します。
.idx インデックス ファイルを再作成する
インデックス ファイルに問題がある、またはそれが疑われる場合や、!index -status
で "Index file loaded (インデックス ファイルが読み込まれました)" 以外のメッセージが表示される場合は、インデックス ファイルを再作成します。
再作成するには、!index -force
を実行します。 それが失敗する場合は、以下の手順に従います。
- デバッガーを閉じます。
- 既存の .idx ファイルを削除すると、.run トレース ファイルと同じ名前になり、.run ファイルと同じディレクトリに配置されます。
- WinDbg で .run トレース ファイルを開きます。 これにより、
!index
コマンドが実行されてインデックスが再作成されます。 !index -status
コマンドを使用して、トレース インデックスが機能していることを確認します。
トレース ファイルが格納されているのと同じ場所に、インデックス ファイル用の十分な領域があることを確認しておいてください。 記録の内容によっては、インデックス ファイルがトレース ファイルよりも大幅に大きくなる場合があります。通常は 2 倍のサイズになります。
.run トレース ファイルに関する問題
.run トレース ファイルに問題があると、以下のようなエラー メッセージが表示される場合があります。
Replay and log are out of sync at fallback data. Packet type is incorrect "Packet Type"
Replay and log are out of sync at opaque data. Log had already reached the end
Replay exit thread event does not match up with logged event
Logged debug write values are out of sync with replay
ほとんどの場合、どのエラー メッセージにも、.run トレース ファイルが使用できないので再記録する必要があるという内容が含まれています。
ユーザー モード アプリを再記録する
ユーザー モード アプリの記録に固有の問題がある場合は、同じ PC で別のアプリを記録してみるか、別の PC で同じアプリを試してみてください。 アプリの特定の部分の記録に固有の問題があるかどうかを確認するために、アプリで別の使い方をしてみて、それを記録してみてください。
インデックスをデバッグまたは作成すると "脱線イベント" に関するメッセージが表示される
以下のようなメッセージが表示されることがあります。
Derailment event MissingDataDerailment(7) on UTID 2, position 2A550B:108 with PC 0x7FFE5EEB4448 Request address: 0x600020, size: 32
TTD は、デバッガーの内部でエミュレーターを実行することにより機能します。このエミュレーターは、デバッグ対象のプロセスの指示を実行して、記録内のすべての位置でそのプロセスの状態をレプリケートします。 脱線は、このエミュレーターによって、結果の状態とトレース ファイルで見つかった情報との間に何らかの不一致が観測された場合に発生します。 たとえば上記のエラーは、トレース内の位置 2A550B:108 にある場所 0x7FFE5EEB4448 で見つかった命令を参照しています。記録に存在しない場所 0x600020 あたりのメモリの読み取りを試行する命令です。
多くの場合、脱線は、トレース内のもっと後ろの方にある記録対象の何らかの命令のところで、記録ツール、時にはエミュレーターで何らかのエラーが発生することによって起こります。
ほとんどの場合、このエラー メッセージは、.run トレース ファイルで不確定な数の命令について、脱線した時点から脱線したスレッドにギャップが生じることを伝えるものです。 デバッグしようとしている関心のあるイベントが、そのギャップの間に発生していなかった場合は、そのトレースを使用できる可能性があります。 関心のあるイベントが、そのギャップの間に発生していた場合は、トレースの再記録が必要になります。