我知道如果我们提供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.dll
64位Windows 7
如前所述通过Handle.exe我sample.dll由6个不同的进程锁定。 我想知道哪一行是实际上保存每个进程sample.dll的代码行。 我的任务是在我的庞大应用中修复手柄泄漏。所以我的问题不是固定在程序的特定部分。 该任务是我必须生成报告包含处理泄漏诊断谁创建它。 泄漏不是特定于文件,它扩展到所有系统资源,如文件,注册表项,事件,信号量,线程等。
我已经使用windbg转储,但我无法找到如何诊断转储文件,尤其是处理泄漏。在我半天左右的搜索中找不到适合我的问题的好教程或解决方案。
是否有任何命令行工具或任何其他工具可以回答我的问题。
在没有可读的调试信息(PDB)的编译应用程序中,这是不可能的。代码行与编译时生成的汇编语句之间没有固定关系,因此通常不可能将语句追溯到高级代码。有了完全解释的语言和一些混合解释器运行时,这可能是可能的,但这是非常普遍的。 – 2015-02-10 12:33:53
此外,即使这是可能的。理论上它可以是任意数量的线。你试图完全解决什么问题? – 2015-02-10 13:03:10
@Ramhound在我上面的例子中D:\ Source \ Sample.dll被6进程锁定。在我的应用程序中,这是由代码的一部分加载,并没有正确释放。有类似的问题,例如句柄泄漏,文件,注册表键,事件等等。我的问题是哪部分代码锁定了句柄?我想要一个实用的解决方案 – Srikanth 2015-02-10 13:11:16