无法在WinDGB中打开Azure应用程序服务.NET Core 2转储文件(转储文件中存在2个运行时)
在WinDBG中打开.NET核心进程的转储文件时遇到一些问题。 我曾经使用WinDBG调试.NET framework转储,没有任何问题,但是当转储来自Azure应用程序服务时,有一点奇怪:clr.dll和coreclr.dll都加载在进程中 因此,使用WinDBG的正确版本的SOS(my Azure VM上dotnet core sdk安装路径中的版本),运行时会显示以下错误!转储堆:无法在WinDGB中打开Azure应用程序服务.NET Core 2转储文件(转储文件中存在2个运行时),.net,azure,.net-core,windbg,sos,.net,Azure,.net Core,Windbg,Sos,在WinDBG中打开.NET核心进程的转储文件时遇到一些问题。 我曾经使用WinDBG调试.NET framework转储,没有任何问题,但是当转储来自Azure应用程序服务时,有一点奇怪:clr.dll和coreclr.dll都加载在进程中 因此,使用WinDBG的正确版本的SOS(my Azure VM上dotnet core sdk安装路径中的版本),运行时会显示以下错误!转储堆: 0:000> !dumpheap Error requesting GC Heap data Unab
0:000> !dumpheap
Error requesting GC Heap data
Unable to build snapshot of the garbage collector state
我尝试在本地发布我的应用程序服务,作为独立的或依赖于框架的,并运行发布的二进制文件。进程中只加载了.NET Core运行时(coreclr.dll),因为我的项目以.NET Core 2.1为目标
一旦部署到Azure,IIS将使用w3wp进程运行二进制文件。此过程是否在我的应用程序服务中注入了一些需要.NET Framework的依赖项为什么运行在Azure上的.NET Core 2.1应用程序与.NET Framework存在某些依赖关系?
分析转储文件(使用ClrMD)时,内部存在两个运行时:
- .NET内核(mscordacore_X86_X86_4.6.26212.01.dll)
- .NET Framework(mscordacwks_X86_X86_4.7.2563.00.dll)
- 使用WinDBG v10(来自Win10 SDK)在Azure上打开依赖于框架的部署应用程序的32位转储
- 使用WinDBG Preview v1.0.1805.17002在Azure上打开依赖于框架的部署应用程序的32位转储
- 使用WinDGB Preview v1.0.1805.17002在Azure上(从Win10 SDK)打开一个独立存储应用程序的64位转储
- DebugDiag可以分析转储并显示有关堆的一些信息(因此它能够以某种方式读取它)
- 我使用自定义C#代码通过ClrMD读取了转储文件,但在我浏览堆时,并不是所有对象都出现(当我手动浏览堆时,DebugDiag显示的某些对象不可见)
任何帮助都将不胜感激!:) 也有类似的问题,并通过运行这些命令修复了它 windbg使用了错误的CLR,这一点您是正确的(错误的原因不是在net core应用程序中)。您可以通过运行命令.cordell并查看所使用的运行时文件路径来证明这一点 告诉调试器要使用的dotnet运行时 .cordell-I coreclr-lp“D:\Program Files(x86)\dotnet\shared\Microsoft.NETCore.App\2.1.1” 卸载和重新加载CLR调试模块
.cordell-ve-u-I coreclr-l为什么在不必要的情况下为应用程序启用.NET Framework?他在本地运行应用程序时不依赖.NET Framework。但一旦部署到azure上,就会加载clr.dll。当他在dotnet.exe上进行完全转储时,他可以看到clr模块被加载只是出于好奇,您能尝试在JetBrains dotMemory中打开此转储吗?我对是否会出现错误也很感兴趣。使用JetBrains dotMemory,我得到了一个异常:此运行时未初始化且不包含任何数据。使用SciTech.Net内存探查器,我可以打开转储文件,但与.Net Core framework相关的所有对象实例都不可见,而与.Net Framwork相关的所有objet实例都可见。@JeromeThievent,您是否有可能将转储文件与相应的mscordacore.dll/mscordacwks.dll一起上载到?在这种情况下,我们很想调查dotMemory行为,但这个问题似乎没有在我们的测试环境中重现。提前谢谢!它起作用了!非常感谢,你为我节省了几个小时的调试时间。