4

我有一个程序正在泄漏可以在任务管理器中看到的 USER 对象。有没有办法确定泄漏的是哪种类型的资源?我已经使用 GDI View 之类的程序来处理 GDI 泄漏,它按对象类型将其分解。对于 USER 对象,是否有类似的东西?

4

2 回答 2

2

您可以通过挂钩 Create/DestroyWindow 来跟踪窗口句柄泄漏,然后跟踪传递的句柄。这样,您可以轻松地使用 ETW 跟踪 WPA 中的图形,其中尚未删除的多余句柄不会被删除。

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

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

在此处输入图像描述

如果您使用画笔或字体,则需要扩展工具以使用您怀疑导致泄漏的方法。只要您知道哪些方法可能会造成泄漏,并且您能够挂钩资源分配和空闲调用,所提出的方法就能够解决任何资源泄漏。

于 2016-01-31T17:05:29.743 回答
0

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

于 2011-03-18T15:19:28.117 回答