(Direct3D 9) 启用 Direct3D 调试信息
是否尝试在调试期间查找有关 Direct3D 对象的详细信息? 例如,以下屏幕截图显示了在watch窗口中查看 Direct3D 界面时通常看到的内容。
可以启用核心调试对象,以便在watch窗口中查看包含对象所有属性的镜像对象。 只需在代码中的 D3D9.h 文件之前包含以下#define:
#define D3D_DEBUG_INFO
若要启用调试信息,必须在 D3D9.h 文件之前生成#define (任何使用 DXUT 的程序都会在编译程序以调试) 时自动启用D3D_DEBUG_INFO。 如果运行的是 SDK 示例,则可以在 DXStdAfx.h (这会影响所有 C++ 示例) 。 还必须运行调试 Direct3D 运行时 (必要时可从控制面板启用) 。
下面是使用 BasicHLSL 示例的示例。
- 将 #define添加到 Dxstdafx.h 文件的第 37 行之前。
- 生成调试项目。
- 在 BasicHLSL.cpp 中的第 307 行设置断点
- 运行调试器。
以下屏幕截图显示了可从watch窗口中获取的有关 Direct3D 纹理对象的详细信息类型。
注意
对象属性名称是可见的,并且仅当启用调试运行时时,这些值才是正确的。 针对零售运行时运行时运行时,值无效。
将调用堆栈用于扩展调试
启用 Direct3D 调试后,还可以在每次创建对象时查看调用堆栈。 这会使应用程序非常慢,但可用于检查资源泄漏。 若要写出调用堆栈,请将以下注册表项设置为 1:
\\HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D\\
D3D9Debugging\\EnableCreationStack
在启用调试的情况下生成应用程序时,可以访问此附加变量:
LPCWSTR CreationCallStack;
每次创建对象时,此变量都将存储调用堆栈。 这会使应用程序非常慢,但可用于调试资源泄漏。
相关主题