次の方法で共有


Direct3D デバッグ情報の有効化 (Direct3D 9)

デバッグ中に Direct3D オブジェクトに関する詳細情報を確認しようとしていますか? たとえば、次のスクリーン ショットは、ウォッチ ウィンドウで Direct3D インターフェイスを見たときに通常表示される内容を示しています。

ウォッチ ウィンドウの direct3d インターフェイスのスクリーン ショットを

コア デバッグ オブジェクトを有効にすると、オブジェクトのすべてのプロパティを含むミラー化されたオブジェクトをウォッチ ウィンドウで表示できます。 D3D9.h ファイルの前に、次の #define をコードに含めるだけです。

#define D3D_DEBUG_INFO

デバッグ情報を有効にするには、D3D9.h ファイルの前に #define をビルドする必要があります (DXUT を使用するすべてのプログラムでは、プログラムがデバッグ用にコンパイルされるときに、D3D_DEBUG_INFOが自動的に有効になります)。 SDK サンプルを実行している場合は、DXStdAfx.h でこれを確認できます (これはすべての C++ サンプルに影響します)。 また、デバッグ Direct3D ランタイムを実行している必要があります (必要に応じて、コントロール パネルから有効にすることができます)。

BasicHLSL サンプルの使用例を次に示します。

  1. 37 行目の前の Dxstdafx.h ファイルに #define を追加します。
  2. デバッグ プロジェクトをビルドします。
  3. BasicHLSL.cppの 307 行目にブレークポイントを設定する
  4. デバッガーを実行します。

次のスクリーン ショットは、ウォッチ ウィンドウから Direct3D テクスチャ オブジェクトについて取得できる詳細情報の種類を示しています。

ウォッチ ウィンドウ

手記

オブジェクト プロパティ名が表示され、値はデバッグ ランタイムが有効になっている場合にのみ正しいです。 リテール ランタイムに対して実行する場合、値は無効です。

 

拡張デバッグに呼び出し履歴を使用する

Direct3D デバッグを有効にすると、オブジェクトが作成されるたびに呼び出し履歴を確認することもできます。 これにより、アプリケーションは非常に低速になりますが、リソース リークのチェックに使用できます。 呼び出し履歴を書き出すには、次のレジストリ キーを 1 に設定します。

\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D\\
D3D9Debugging\\EnableCreationStack

デバッグを有効にしてアプリケーションをビルドすると、次の追加変数にアクセスできます。

  LPCWSTR CreationCallStack;

この変数は、オブジェクトが作成されるたびに呼び出し履歴を格納します。 これにより、アプリケーションは非常に低速になりますが、リソース リークのデバッグに使用できます。

プログラミングのヒント