首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何深入查看创建句柄的代码

如何深入查看创建句柄的代码
EN

Stack Overflow用户
提问于 2015-02-10 20:26:39
回答 2查看 436关注 0票数 3

我知道,如果我们提供Handle.exe的绝对路径,它将列出锁定文件的所有进程。

代码语言:javascript
复制
F:\Softwares\Handle>Handle.exe  D:\Source\sample.dll

Handle v4.0
Copyright (C) 1997-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

test1.exe           pid: 9928   type: File           408: D:\Source\sample.dll
test2.exe           pid: 10840  type: File           6A8: D:\Source\sample.dll
test3.exe           pid: 15788  type: File           374: D:\Source\sample.dll
test4.exe           pid: 10940  type: File           308: D:\Source\sample.dll
test5.exe           pid: 15424  type: File           3FC: D:\Source\sample.dll
test6.exe           pid: 10076  type: File           8AC: D:\Source\sample.dll

Windows 7 64位

正如Handle.exe所说的,我的sample.dll被6个不同的进程锁定。我想知道哪一行代码实际包含来自每个进程的sample.dll。我的任务是修复我庞大的应用程序中的句柄泄漏。所以我的问题不是固定在程序的特定部分。我的任务是生成包含句柄泄漏的报告,诊断谁创建了它。泄漏不是特定于文件的,它扩展到所有系统资源,如文件、注册表项、事件、信号量、线程...etc。

我使用windbg进行了转储,但我找不到如何诊断转储文件,尤其是句柄泄漏。在我大约半天的搜索中,我找不到适合我的问题的好的教程或解决方案。

是否有命令行工具或任何其他工具来回答我的问题。

EN

回答 2

Stack Overflow用户

发布于 2015-02-13 18:23:02

您使用了错误的调试工具。如果您想要阅读调试器,它将详细介绍如何使用!htrace调试器命令获取泄漏句柄的堆栈跟踪。同样也被this existing覆盖了,所以问题。

你会经常看到“Windows调试工具”被提及。它不再是一个单独的下载,而是包含在Windows SDK安装中。

票数 4
EN

Stack Overflow用户

发布于 2015-02-20 17:40:00

我认为你可以通过使用另一个Sysinternals工具procmon来找到罪魁祸首。

这将使你的一天,唯一的问题是在句柄创建速度非常慢的情况下-你不能记录系统活动超过十分之一分钟…除非你的系统安装了大量的内存。

一旦你记录了你的事件(不要忘了以管理员身份运行它,并在几分钟后停止它,我更喜欢在停止它后分析捕获的数据)转到菜单“工具”->“文件摘要”并在那里找到访问的文件。

双击一个文件(或文件夹视图中的某个目录,等等)。双击"anywehere"),将在procmon视图中添加一个筛选器,并允许您分析由系统中运行的任何进程执行的有关它的每个操作。

如果双击单个操作,您还可以在该系统调用的上下文中查看堆栈的回溯,以及有关I/O (在此特定情况下)操作的其他详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28450264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档