2011-10-21 54 views
3

在我的一个应用程序中,我观察到越来越多的手柄。该数字大约每秒都会增加,而不使用应用程序,因此在后台处理代码的某些部分中必定存在句柄泄漏。如何跟踪处理泄漏?

如何跟踪这种泄漏?有没有什么工具可以帮助解决这个问题?跟踪处理泄漏时寻找什么样的模式?导致手柄泄漏的最常见错误是什么?

一大堆的问题,但我希望他们有关系,足以让他们在一个问题。感谢您提前提出任何意见!

回答

4

我建议使用Process Explorer。以管理员身份运行它,以确保您能看到所有相关数据。在那里你可以观察你的过程有哪些类型的句柄,哪些过度被创建,而不是free'd。这应该有助于缩小搜索范围(在我的情况中,由于对winsocks行为的一些错误假设,我的套接字漏到了整个地方)。也许那时你可以隔离相关的代码并将其发布在这里,以便我们检查是否有任何错误。祝你好运!

+0

+1谢谢!我知道ProcessExplorer,但并未将其用于此目的。正在泄漏的手柄是节柄。看到我的后续问题:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

5

一些廓(即AQTime)可以配置文件的Windows资源的应用程序。如果您使用XE,则可以使用AQTime的基本版本。

句柄泄漏是常见的,如果执行路径不正确地关闭它们 - 但在Windows句柄是在很多不同的情况用了一个很普通的项目,哪一种把手的是应用程序泄露?

+0

+1谢谢!我必须尝试AQTime。原来,我的应用程序正在泄漏节柄。请看看后续问题:http://stackoverflow.com/questions/7846526/what-c​​an-cause-section-handle-leaks – jpfollenius

+1

像AQTime一个分析器能够告诉你在哪里泄露的手柄已经创建。使用Process Explorer会更困难些,因为它可以显示调用堆栈,但它并不像AQTime那样记录信息 - 虽然AQTime因此而“更加重要”。你也可以尝试进程监视器,它实际上记录了许多这些调用。无论如何,如果你有像AQTime这样的分析器可用,恕我直言,这是最好的工具来完成这样的事情。当您必须检查可以安装AQTime或类似系统的系统时,PE/PM是非常有价值的工具。 – 2011-10-21 13:05:35