如何跟踪Windows USER对象泄漏?

时间:2011-03-18 14:17:38

标签: c++ windows visual-studio winapi resource-leak

我有一个漏掉USER对象的程序,可以在任务管理器中看到。有没有办法确定哪种类型的资源被泄露?我使用了像GDI View这样的程序来解决GDI泄漏问题。 USER对象有什么类似的东西吗?

2 个答案:

答案 0 :(得分:2)

您可以通过挂钩Create / DestroyWindow来追踪Window Handle泄漏,然后追踪传递的句柄。通过这种方式,您可以轻松地使用ETW跟踪WPA中的图形,其中尚未删除的多余句柄保持不变。

请参阅http://geekswithblogs.net/akraus1/archive/2016/01/30/172079.aspx

使用EasyHook的分支,它也适用于Win 8及更高版本的x64。 下面是使用ETWStackwalk.exe创建的图像,它是我的EasyHook fork的一部分。使用WPA,您可以通过检查AllocSize列的值>来查看所有已打开和关闭以及哪些窗口仍处于打开状态。 0。 然后筛选仍然打开句柄的事件,直接获得分配它的调用堆栈,但到目前为止从未释放过。

enter image description here

如果您使用的是Brushes或Fonts,则需要扩展该工具,以确定您怀疑应对泄漏负责的方法。只要您知道怀疑哪些方法会产生泄漏并且您能够挂钩资源分配和免费呼叫,所提出的方法就能够解决任何资源泄漏问题。

答案 1 :(得分:0)

有一个名为windbg的调试器。它可以做这些事情,但学习曲线是惊人的。