我有一个程序泄漏了USER对象,在任务管理器中可以看到。有没有办法确定正在泄漏的资源类型?我已经使用了像GDI View这样的程序来检测GDI泄漏,它会按对象类型进行拆分。是否有类似于此的东西用于USER对象?
您可以通过钩取Create/DestroyWindow并跟踪传递的句柄来追踪Window Handle泄漏。这样,您可以很容易地生成一个WPA中的图形,其中尚未删除的多余句柄保持不变。请参见http://geekswithblogs.net/akraus1/archive/2016/01/30/172079.aspx。使用我的EasyHook分支,它也适用于Win 8及更高版本的x64。下面是使用ETWStackwalk.exe创建的图像,该文件是我的EasyHook分支的一部分。使用WPA,您可以查看所有已打开和已关闭的窗口,并通过检查AllocSize列中的值> 0来确定哪些窗口仍然打开。然后过滤仍然具有打开句柄的事件,您将直接获得已分配但尚未释放的调用堆栈。 如果你想要获取刷子或字体,你需要扩展该工具,针对你认为可能导致资源泄漏的方法。所提出的方法可以解决任何资源泄露,只要你知道哪些方法被怀疑会创建泄漏,并且能够挂钩资源分配和释放调用。