У меня проблемы с открытием файла дампа процесса .NET Core в WinDBG. Раньше я без проблем отлаживал дампы .NET framework с помощью WinDBG, но с дампом, поступающим из службы приложений Azure, происходит что-то странное: и clr.dll, и coreclr.dll загружаются внутри процесс..
В результате при использовании правильной версии SOS из WinDBG (той, которая указана в пути установки sdk ядра dotnet на моей виртуальной машине Azure) при запуске! Dumpheap отображается следующая ошибка:
0:000> !dumpheap
Error requesting GC Heap data
Unable to build snapshot of the garbage collector state
Я попытался опубликовать свою службу приложений локально, как автономную или зависимую от платформы, и запустить опубликованные двоичные файлы. В процессе загружается ТОЛЬКО .NET Core Runtime (coreclr.dll), поскольку мой проект нацелен на .NET Core 2.1.
После развертывания в Azure двоичные файлы запускаются IIS с помощью процесса w3wp. Внедряет ли этот процесс некоторые зависимости в мою службу приложений, для которых требуется .NET Framework? Почему мое приложение .NET Core 2.1, работающее в Azure, имеет некоторую зависимость от .NET Framework?
При анализе файла дампа (с помощью ClrMD) внутри присутствуют две среды выполнения:
- .NET Core (mscordaccore_X86_X86_4.6.26212.01.dll)
- .NET Framework (mscordacwks_X86_X86_4.7.2563.00.dll)
Протестированные сценарии (не сработавшие):
- Открытие 32-битного дампа развернутого приложения, зависящего от платформы, в Azure с помощью WinDBG v10 (из Win10 SDK)
- Открытие 32-битного дампа развернутого приложения, зависящего от платформы, в Azure с помощью WinDBG Preview v1.0.1805.17002
- Открытие 64-битного дампа автономного удаленного приложения в Azure (из Win10 SDK) с использованием WinDGB Preview v1.0.1805.17002
Что работает (почти):
- DebugDiag может анализировать дамп и показывать некоторую информацию о куче (чтобы она могла как-то ее прочитать)
- Мне удалось прочитать дамп с помощью ClrMD, используя собственный код C #, но не все объекты кажутся присутствующими, когда я просматриваю кучу (некоторые объекты, показанные DebugDiag, не видны, когда я просматриваю кучу вручную).
Тем не менее мне нужно иметь возможность читать дамп с помощью WinDGB, чтобы найти потенциальную утечку памяти. Уже много часов я работаю над этим и не могу найти никакого решения.
Любая помощь будет принята с благодарностью! :)