我在WinDBG中打开.NET Core进程的转储文件时遇到了一些麻烦。我曾经使用WinDBG调试.NET框架转储,没有任何问题,但是从Azure应用服务进行转储时,有些奇怪:clr.dll和coreclr.dll都加载在进程内。
结果,使用WinDBG的正确版本的SOS(我的Azure VM上的dotnet核心sdk安装路径中的一个),在运行!dumpheap时显示以下错误:
0:000> !dumpheap
Error requesting GC Heap data
Unable to build snapshot of the garbage collector state
Run Code Online (Sandbox Code Playgroud)
我试图以独立或依赖框架的形式在本地发布我的App Service,然后运行已发布的二进制文件。由于我的项目针对.NET Core 2.1,因此在此过程中仅加载了.NET Core Runtime(coreclr.dll)。
二进制文件一旦部署到Azure,将由IIS使用w3wp进程运行。此过程是否在我的应用程序服务中注入了一些需要.NET Framework的依赖项?为什么我在Azure上运行的.NET Core 2.1应用程序对.NET Framework具有某些依赖性?
分析转储文件(使用ClrMD)时,内部存在两个运行时:
经过测试的方案(无效):
什么工作(几乎):
但是,我需要能够使用WinDGB读取转储,以发现潜在的内存泄漏。我已经花了好几个小时来研究它,却找不到任何解决方案。
任何帮助将不胜感激!:)