【问题标题】:Determine allocated 'Handle' types确定分配的“句柄”类型
【发布时间】:2012-02-16 21:33:11
【问题描述】:

我正在调试一个我怀疑正在泄漏 win32 句柄的应用程序。任务管理器报告应用程序分配了大约 5000 个句柄。

使用任务管理器,我统计了 GDI 和用户对象,发现分别是 350 和 73。我用“GetGuiResources”函数验证了这个计数。

使用 ProcessExplorer,我查看了底部窗格中打开的句柄。列出了一些文件句柄和 DLL,但还不到 5000 个。

如何确定这 5000 个已分配句柄的类型?他们来自哪里?

【问题讨论】:

  • 使用调试器。单步执行代码并寻找增加的地方。无论您踩到什么导致增加,都需要仔细观察。

标签: c# winapi user-interface mfc


【解决方案1】:

将 WinDbg 附加到进程并键入

!handle

它会在最后打印出句柄列表和摘要。示例:


>!handle
 ... 
Handle c28
  Type          File
Handle c2c
  Type          Section
Handle c30
  Type          File
Handle c34
  Type          Event
Handle c44
  Type          Event
Handle c48
  Type          File
Handle c4c
  Type          Section
Handle c50
  Type          File
636 Handles
Type            Count
None            10
Event           267
Section         126
File            132
Directory       2
Mutant          16
WindowStation   2
Semaphore       3
Key             17
Thread          37
Desktop         1
IoCompletion    3
Timer           3
KeyedEvent      1
TpWorkerFactory 16

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2011-10-12
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2012-03-17
    相关资源
    最近更新 更多