我在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
我尝试在本地发布我的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读取转储以找到潜在的内存泄漏。我工作了几个小时,无法找到任何解决方案。
任何帮助将不胜感激! :)
答案 0 :(得分:5)
发生了类似的问题,并通过运行以下命令解决了该问题。
您是正确的,因为windbg使用的是错误的CLR(与非net core应用程序相同)。您可以通过运行命令 .cordll 并查看运行时文件使用的路径来证明这一点。
告诉调试器要使用哪个dotnet运行时
.cordll -I coreclr -lp“ D:\ Program Files(x86)\ dotnet \ shared \ Microsoft.NETCore.App \ 2.1.1”
卸载和重新加载CLR调试模块
.cordll -ve -u -I coreclr -l </ strong>