首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX 10资源泄漏

DirectX 10资源泄漏
EN

Stack Overflow用户
提问于 2010-06-15 11:48:07
回答 2查看 2.7K关注 0票数 6

在我的DirectX应用程序的末尾,我得到了“Direct3D设备有一个非零引用计数,这意味着一些对象没有被释放”。应用程序很大,而且不是我写的,我怎么去调试哪些资源没有被释放呢?

EN

回答 2

Stack Overflow用户

发布于 2010-06-15 12:43:21

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

当你下一次运行你的应用程序时,DirectX应该会给你更多关于泄漏的信息。具体地说,您需要查找如下所示的行:

代码语言:javascript
复制
D3DX: Set HKLM\Software\Microsoft\Direct3D\D3DXBreakOnAllocId=0x1c17 to debug
                                                allocation id ^^^^^^

或者,像这样:

代码语言:javascript
复制
Direct3D9: (WARN) :Memory Address: 00385580 lAllocID=1 dwSize=000047f8, (pid=00000474)
                                       allocation id ^

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

然后,就需要检查调用堆栈,看看涉及到了什么DirectX调用。

票数 6
EN

Stack Overflow用户

发布于 2010-06-15 12:42:26

您可以按照here中的说明使用DirectX控制面板实用程序。选中“在内存泄漏时中断”复选框,然后您可以使用“在AllocID上中断”来查找未释放的资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3042406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档