DirectX 10资源泄漏

yxk*_*yxk 6 c++ debugging directx

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

Bla*_*way 6

第一步是通过DirectX控制面板转向使用DirectX调试DLL .(IIRC,这些是安装DirectX SDK时的可选项,因此您可能需要安装它们.)

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

D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug
                                                allocation id ^^^^^^
Run Code Online (Sandbox Code Playgroud)

或者,像这样:

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

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

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

  • 这种方法适用于DX10吗?我没有看到任何警告信息 (2认同)

Kir*_*sky 1

您可以按照此处所述使用 DirectX 控制面板实用程序。打开“Break on Memory Leaks”复选框,然后您可以使用“Break on AllocID”来查找哪些资源没有被释放。