DirectX 10资源泄漏

时间:2010-06-15 03:48:07

标签: c++ debugging directx

在我的DirectX应用程序结束时,我得到“Direct3D设备具有非零引用计数,这意味着某些对象未被释放。”应用程序很大,不是我编写的,如何调试哪些资源没有被发布?

2 个答案:

答案 0 :(得分:6)

第一步是使用DirectX调试DLL via the DirectX Control Panel。 (IIRC,这些是安装DirectX SDK时的可选项,因此您可能需要安装它们。)

当您下次运行应用程序时,DirectX应该会为您提供有关泄漏内容的更多信息。具体来说,你会想要找到这样的一行:

D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug
                                                allocation id ^^^^^^

或者,像这样:

Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474)
                                       allocation id ^

一旦有了分配ID,就可以通过在DirectX控制面板中设置Break on AllocID设置(或通过设置上面提到的注册表项),告诉DirectX在程序中发生分配时中断。 / p>

然后,这是检查callstack以查看涉及DirectX调用的问题。

答案 1 :(得分:1)

您可以按照here所述使用DirectX控制面板实用程序。打开“Break on Memory Leaks”复选框,然后您可以使用“Break on AllocID”查找未释放的资源。