診断ログ
PIX 診断ログはイベントの記録であり、クラッシュが発生する前にターゲット プログラムが何を行っていたか理解する助けになります。診断ログは、ターゲット プログラムによる Direct3D の不正な使用をデバッグするのに役立ちます。
- [Unexpected Exit] ダイアログ ボックス
- 診断ログ
[Unexpected Exit] ダイアログ ボックス
クラッシュしたアプリケーションの診断ログを生成するには、まずターゲット プログラムの PIX を起動します。PIX はターゲット プログラムを起動し、クラッシュが発生すると [Unexpected Exit] ダイアログ ボックスを開きます。ダイアログ ボックスには次に行うべき推奨手順が示され、さらに次の手順へ進むための UI 要素が表示されます。
ダイアログ ボックスには選択可能な推奨アクションの一覧と、いくつかのチェック ボックスが表示されています。基本的には、PIX を使用してターゲット プログラムを再実行して、デバッグ ランタイムが生成したデバッグ出力のすべてを診断ログに保存することが理想です。ログを読むことで、ターゲット プログラムがクラッシュの直前に実行した Direct3D 呼び出しのリストを確認することができます。
以下の一般的な注意事項を確認してください。
- DirectX コントロール パネルを使って Direct3D デバッグ ランタイムを有効にします。デバッグ ランタイムは、API 呼び出しについて、パラメーターと、関数呼び出しの HRESULTS がどのようになっていたかを出力します。これにはどのような呼び出しが行われたかと、それらが成功したかどうかについての情報が含まれています。この内容は Visual Studio などのデバッガーを実行した際のデバッグ出力と同じものです。
- デバッグ メッセージをログに追加するか、またはターゲット プログラムを起動したときデバッグ プログラム (Visual Studio など) をアタッチするように一時停止するかをチェック ボックスを使用して選択します。
- 再起動ボタンを使うと、ターゲット プログラムを何回でも実行することができます。
また、[Disable D3DX Analysis] チェック ボックスがあります。データを PIX で分析中に問題が発生し、原因と考えられる D3DX 呼び出しを除去したい場合、このチェック ボックスを選択します。これによってアプリケーションからの D3DX 呼び出しが阻止されることはありませんが、PIX がそれらに関するデータ収集を行わなくなります。
デバッグ セッションを終了するには、[Cancel] ボタンを使って診断モードを終了します。これにより PIX メイン ウィンドウに戻ることができます。
診断ログ
実験を再起動すると、PIX は次のような診断ログを生成します。
診断ログには、ターゲット プログラム、およびクラッシュの前にターゲット プログラムが実行した Direct3D 呼び出しが一覧表示されます。ダイアログ ボックスでは、すべての呼び出しがスクロール可能なリストで表示されます。上にスクロールすると最初に行われた呼び出しが表示され、下にスクロールすると最後に行われた呼び出しが表示されます。
ログ ファイルはかなり大きくなることがあるため (この例では 0.5 MB)、PRE および POST マーカーを使ってリスト内を移動できます。API 呼び出しが行われると PRE マーカーが追加され、呼び出しが返るときに POST マーカーが追加されます。ログ内では、API 呼び出しがネストされていることがわかるように PRE および POST マーカーはインデント表示されます。
クラッシュしたプログラムの分析に診断ログを使用する例については、「クラッシュするアプリケーションのデバッグ」を参照してください。