Direct3D デバッグ情報の有効化 (Direct3D 9)
デバッグ中に Direct3D オブジェクトに関する詳細を検索しますか。たとえば、ウォッチ ウィンドウで Direct3D インターフェイスを見ると、通常は次のようなものが表示されます。
オブジェクトのプロパティをすべて含むミラー オブジェクトをウォッチ ウィンドウに表示できるように、コア デバッグ オブジェクトを有効にできます。単に D3D9.h ファイルの前、コードに次の #define を含めてください。
#define D3D_DEBUG_INFO
デバッグ情報を有効にするには、#define は D3D9.h ファイルの前にビルドする必要があります (DXUT を使用しているプログラムは、プログラムがデバッグのためにコンパイルされる際に D3D_DEBUG_INFO を自動的に有効にします)。SDK サンプルを実行している場合、これは DXStdAfx.h で確認できます (これはすべての C++ サンプルに影響します)。また、デバッグ Direct3D ランタイムも実行する必要があります (必要に応じてコントロール パネルから有効にできます)。
次に、BasicHLSL Sample の使用例を示します。
- Dxstdafx.h ファイルの行 37 の前に #define を追加します。
- デバッグ プロジェクトをビルドします。
- BasicHLSL.cpp の行 307 にブレークポイントを設定します。
- デバッガーを実行します。
ウォッチ ウィンドウからは、Direct3D テクスチャー オブジェクトに関する次のような情報を取得できます。
注
オブジェクトのプロパティ名が表示されますが、この値はデバッグのランタイムが有効な場合のみ正確です。リテール ランタイムに対して実行するときは、値は無効です。
拡張デバッグの呼び出し履歴の使用
Direct3D デバッグを有効にすると、オブジェクトが作成されるたびに呼び出し履歴も確認できます。これによって、アプリケーションのパフォーマンスはかなり遅くなりますが、リソース リークのチェックに使用できます。呼び出し履歴を書き出すには、次のレジストリ キーを 1 に設定します。
¥¥HKEY_LOCAL_MACHINE¥¥SOFTWARE¥¥Microsoft¥¥Direct3D¥¥ D3D9Debugging¥¥EnableCreationStack
アプリケーションをデバッグを有効にしてビルドすると、以下の追加の変数にアクセスできます。
LPCWSTR CreationCallStack;
この変数は、オブジェクトが作成されるたびに呼び出し履歴を格納します。これによって、アプリケーションのパフォーマンスはかなり遅くなりますが、リソース リークのデバッグに使用できます。