7

在我的一个应用程序中,我观察到越来越多的句柄。在不使用应用程序的情况下,该数字大约每秒递增一次,因此在后台处理代码的某些部分中肯定存在句柄泄漏。

如何追踪此类泄漏?有什么工具可以帮助解决这个问题吗?跟踪句柄泄漏时要寻找哪些模式?导致句柄泄漏的最常见错误是什么?

一堆问题,但我希望它们足够相关,可以将它们放在一个问题中。感谢您提前输入!

4

3 回答 3

7

我建议使用Process Explorer。以管理员身份运行它以确保您看到所有相关数据。在那里,您可以观察您的进程有哪些类型的句柄,以及哪些句柄被过度创建而未被释放。这应该可以帮助您缩小搜索范围(在我的情况下,由于对 winsocks 行为的一些错误假设,我的套接字到处泄漏。)。或许那你可以把相关代码隔离出来,贴在这里让我们检查一下有没有问题。祝你好运!

于 2011-10-21T07:29:40.327 回答
5

一些分析器(即AQTime)可以分析 Windows 资源应用程序。如果您使用的是 XE,则可以使用 AQTime 的基本版本。

如果执行路径没有正确关闭它们,句柄泄漏很常见 - 但在 Windows 中,句柄是在许多不同情况下使用的非常常见的项目,您的应用程序泄漏了哪种句柄?

于 2011-10-21T07:29:52.167 回答
1
  1. 在win10中,在https://docs.microsoft.com/en-us/sysinternals/downloads/handle下载工具“Handle” ,

  2. 用法:

    处理 [[-a] [-u] | [-c [-l] [-y]] | [-s]] [-p |> [名称]

  3. 例子:

    在进程 33920 中显示所有类型的句柄及其计数:在 cmd 中,运行“handle64 -s -p 33920”

  4. 结果如下所示:

在此处输入图像描述

  1. 运行第 3 步,多次获取 4 的结果,然后检查 diff 并获取内存激增的结果
于 2022-01-18T13:38:18.263 回答