(Direct3D 9) 启用 Direct3D 调试信息

是否尝试在调试期间查找有关 Direct3D 对象的详细信息? 例如,以下屏幕截图显示了在watch窗口中查看 Direct3D 界面时通常看到的内容。

watch窗口中 direct3d 界面的屏幕截图

可以启用核心调试对象,以便在watch窗口中查看包含对象所有属性的镜像对象。 只需在代码中的 D3D9.h 文件之前包含以下#define:

#define D3D_DEBUG_INFO

若要启用调试信息,必须在 D3D9.h 文件之前生成#define (任何使用 DXUT 的程序都会在编译程序以调试) 时自动启用D3D_DEBUG_INFO。 如果运行的是 SDK 示例,则可以在 DXStdAfx.h (这会影响所有 C++ 示例) 。 还必须运行调试 Direct3D 运行时 (必要时可从控制面板启用) 。

下面是使用 BasicHLSL 示例的示例

  1. 将 #define添加到 Dxstdafx.h 文件的第 37 行之前。
  2. 生成调试项目。
  3. 在 BasicHLSL.cpp 中的第 307 行设置断点
  4. 运行调试器。

以下屏幕截图显示了可从watch窗口中获取的有关 Direct3D 纹理对象的详细信息类型。

watch窗口中 direct3d 纹理对象的屏幕截图

注意

对象属性名称是可见的,并且仅当启用调试运行时时,这些值才是正确的。 针对零售运行时运行时运行时,值无效。

 

将调用堆栈用于扩展调试

启用 Direct3D 调试后,还可以在每次创建对象时查看调用堆栈。 这会使应用程序非常慢,但可用于检查资源泄漏。 若要写出调用堆栈,请将以下注册表项设置为 1:

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

在启用调试的情况下生成应用程序时,可以访问此附加变量:

  LPCWSTR CreationCallStack;

每次创建对象时,此变量都将存储调用堆栈。 这会使应用程序非常慢,但可用于调试资源泄漏。

编程提示