【问题标题】:GDI handle typesGDI 句柄类型
【发布时间】:2011-10-12 09:27:47
【问题描述】:

我目前正在尝试追踪 GDI 句柄泄漏。我目前正在使用GDIView 来追踪它。该工具将 GDI 对象分为 Pen、ExtPen、Bitmap、Font、Palette、Region、DC、Metafile DC、Enhanced Metafile DC 和 Other GDI 类别。这些类别在称为 GDI Total 的列中汇总。除此之外,还有一个名为 All GDI 的列。正是在本专栏中,我正在检测泄漏。

由于我没有该工具的源代码,所以我看不到真正发生了什么。该工具的作者是否遗漏了句柄类型?它看起来像。我确实知道存在泄漏,因为一些用户报告说他们看到了臭名昭著的对话框所需的资源是(文本结束)。对话框可能需要数周时间才会出现,所以我很确定它不是 DC。

任何有关如何追踪此问题的想法将不胜感激!由于我的预算有限,千美元的工具是不可能的。调试 GDI 的钩子就足够了,因为我不介意做侦探工作。

【问题讨论】:

    标签: winapi gdi memory-leaks


    【解决方案1】:

    我发现了问题。显然,GDIView 认为图标属于未知类别。问题是一个图标被加载并附加到一个对象上。该对象未设置为在销毁时自动删除图标。向该工具的作者发送电子邮件...

    【讨论】:

    • GDI 视图中缺少一些对象类型,但 Icon 是 USER 对象,而不是 GDI。
    【解决方案2】:

    有一次我遇到了类似的问题,我使用了任务管理器 - 要求它显示每个进程的 GDI 句柄计数,并单步执行程序代码以查看句柄计数意外增加而未能减少的位置。花了一些时间,但最终使用分治法我发现了错误。

    【讨论】:

    • 我真的推荐 GDIView 程序,因为它会显示分配给您的各种类型的 GDI 对象。此外,它为您提供快照/差异机制,以便您获得两个时间点之间的差异测量。不幸的是,它不能正确识别图标资源。
    猜你喜欢
    • 2013-06-10
    • 2012-12-04
    • 2020-12-20
    • 2011-01-29
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多