【问题标题】:What execution stack / .NET AppDomain holds file handle?什么执行堆栈/.NET AppDomain 保存文件句柄?
【发布时间】:2012-01-21 07:33:55
【问题描述】:

我有 .NET 可执行文件,它在单独的 AppDomain 中托管插件。 有时在应用程序使用期间,其中一个插件会锁定文件并防止其移动或删除。

我需要找出谁拥有文件句柄?

问题是间歇性的,难以重现。有5个插件。 禁止插件访问这些文件或杀死句柄(就像 Unlocker 一样)不是解决方案。

我试过了:

首先,Sysinternals - 但它只显示持有具有指定名称的文件的进程。

其次,如有关 WinDbg 的文章和文档中所述,我可以使用 !process 和 !handle,但可以使用下一个:

0:001> !process
No export process found 
0:001> !handle 314 ff 123 
Unknown type '123

我可以使用带有较少参数的 !handle,但我的版本(出于未知原因)甚至没有像 Debug Tutorial Part 5: Handle Leaks 那样显示文件名。我的可执行文件引用了 100 个文件。 我想深入了解 WinDbg 的方向,但由于某种原因,它是从 Windows 7 SDK 安装的,其功能与文档中所述的不同,这妨碍了我进一步调查?

我有:

WinDbg 6.12.0002.633 x86(我的进程是32位)

Windows 7 SP1 x64

【问题讨论】:

    标签: .net windows file debugging windbg


    【解决方案1】:

    如果您知道文件被锁定,那么最简单的做法是在您的进程上运行 ProcMon 并监视文件并查看哪个线程打开了它,然后在 windbg 中检查该线程。您可以通过右键单击操作并转到属性来查看 procmon 中哪个线程打开了文件。这将为您提供线程 ID 和线程堆栈跟踪。

    如果你不能这样做,我会尝试完全卸载 windbg,然后安装 x64 版本。 x64 可以同时打开 x86 和 x64,然后重试命令。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2012-11-28
      • 2010-10-21
      • 2013-05-19
      相关资源
      最近更新 更多