我知道,如果我们提供Handle.exe的绝对路径,它将列出锁定文件的所有进程。
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.dllWindows 7 64位
正如Handle.exe所说的,我的sample.dll被6个不同的进程锁定。我想知道哪一行代码实际包含来自每个进程的sample.dll。我的任务是修复我庞大的应用程序中的句柄泄漏。所以我的问题不是固定在程序的特定部分。我的任务是生成包含句柄泄漏的报告,诊断谁创建了它。泄漏不是特定于文件的,它扩展到所有系统资源,如文件、注册表项、事件、信号量、线程...etc。
我使用windbg进行了转储,但我找不到如何诊断转储文件,尤其是句柄泄漏。在我大约半天的搜索中,我找不到适合我的问题的好的教程或解决方案。
是否有命令行工具或任何其他工具来回答我的问题。
发布于 2015-02-13 18:23:02
您使用了错误的调试工具。如果您想要阅读调试器,它将详细介绍如何使用!htrace调试器命令获取泄漏句柄的堆栈跟踪。同样也被this existing覆盖了,所以问题。
你会经常看到“Windows调试工具”被提及。它不再是一个单独的下载,而是包含在Windows SDK安装中。
发布于 2015-02-20 17:40:00
我认为你可以通过使用另一个Sysinternals工具procmon来找到罪魁祸首。
这将使你的一天,唯一的问题是在句柄创建速度非常慢的情况下-你不能记录系统活动超过十分之一分钟…除非你的系统安装了大量的内存。
一旦你记录了你的事件(不要忘了以管理员身份运行它,并在几分钟后停止它,我更喜欢在停止它后分析捕获的数据)转到菜单“工具”->“文件摘要”并在那里找到访问的文件。
双击一个文件(或文件夹视图中的某个目录,等等)。双击"anywehere"),将在procmon视图中添加一个筛选器,并允许您分析由系统中运行的任何进程执行的有关它的每个操作。
如果双击单个操作,您还可以在该系统调用的上下文中查看堆栈的回溯,以及有关I/O (在此特定情况下)操作的其他详细信息。
https://stackoverflow.com/questions/28450264
复制相似问题