Какой стек выполнения / .NET AppDomain содержит дескриптор файла? - PullRequest
0 голосов
/ 21 января 2012

У меня есть исполняемый файл .NET, в котором размещаются плагины в отдельных доменах приложений.Иногда во время использования приложения один из этих плагинов блокирует файлы и предотвращает их перемещение или удаление.

Мне нужно выяснить, кто владеет дескрипторами файлов?

Проблема с перебоями и ее трудно воспроизвести.Есть 5 плагинов.Это не решение, чтобы запретить плагинам доступ к этим файлам или уничтожить дескрипторы (как это делает Unlocker).

Я пытался:

Во-первых, Sysinternals - но он показывает только процесс, который хранит файл с указанным именем.

Во-вторых, как указано в статьях и документах о WinDbg, я могу использовать! process и! handle, но получите следующее:

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

Я могу использовать! handle с меньшим количеством параметров, но моя версия (по неизвестной причине) даже не показывает мне имя файла, как в Руководство по отладкеЧасть 5. Обработка утечек .Мой исполняемый файл содержит ссылку на 100 файлов.Я бы хотел покопаться в направлении с WinDbg, но по какой-то причине он, установленный из Windows 7 SDK, отличается по функциям от заявленных в документации, что мешает моему дальнейшему исследованию?

У меня есть:

WinDbg 6.12.0002.633 x86 (мой процесс 32-битный)

Windows 7 SP1 x64

1 Ответ

2 голосов
/ 21 января 2012

Если вы знаете, что файл заблокирован, то проще всего будет запустить ProcMon в вашем процессе, проследить за файлом и посмотреть, какой поток его открыл, а затем проверить этот поток в windbg. Вы можете увидеть, какой поток открыл файл в procmon, щелкнув правой кнопкой мыши по операции и перейдя в свойства. Это даст вам идентификатор потока и трассировку стека потоков.

Если вы не можете этого сделать, я бы попытался полностью удалить windbg, а затем установить версию x64. X64 может открыть как x86, так и x64, а затем снова попробовать команды.

...