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