Windows 8带有C ++ directx9调试输出

时间:2013-02-13 13:33:34

标签: c++ windows-8 directx-9

我有一个游戏,我需要弄清楚一个特定的问题。

当您最大化,移动窗口或调整窗口大小时,DirectX设备将重置。但在重置之前,应释放所有图形分配的对象,这些对象不属于托管池。 至于这个游戏,当应用程序退出时(从基本的directx调试库输出)似乎有30个未发布的对象,这导致我假设当设备重置时,会出现同样的问题。这会导致游戏在最大化,移动或调整窗口大小时崩溃,这显然是不可接受的。

更多的研究表明,您可以通过DirectX控制面板在DirectX中启用过多的调试,除非您有Windows 8,否则没有这样的东西可用。您可以安装DirectX sdk并打开DirectX控制面板,但Direct3D选项卡上的所有功能都显示为灰色。然后,这个过多的调试输出级别将打印出退出时尚未释放的分配地址,这可以让我知道在重置设备事件期间实际上未释放的内容。

游戏使用Visual Studio 2010中的DirectX 9库以C ++构建。 PS。默认情况下Windows 8附带DirectX SDK但没有控制面板选项,您必须手动安装DirectX SDK才能获得它。

我的问题是,如何在我的环境(Windows 8 Pro)上启用过多的directx调试? 在使用directx调试库编译时,有没有什么方法可以在源代码中为每个应用程序启用过多的调试,或者你必须使用DirectX控制面板吗?

干杯,Nicco。

1 个答案:

答案 0 :(得分:0)

您可以通过注册表启用一些调试here

另外,我玩控制面板并发现它修改了我的(windows7)机器上的以下按键:

HKEY_CURRENT_USER\Software\Microsoft\Direct3D\ControlPanel

在控制面板中选中“使用Direct3D9的调试版本”,将“LoadDebugRuntime”注册表项设置为值1(否则为0)。

选中“Break On Memory Leak”将“BreakOnMemLeak”键设置为1。 选中“Break On D3D Error”将“BreakOnDPF”键设置为1。

请注意,这些相同的密钥也在以下位置重复:

HKEY_CURRENT_USER\Software\Microsoft\Direct3D\

因此,如果您没有安装控制面板,他们也可以在那里工作。