Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在WinDGB中打开Azure应用程序服务.NET Core 2转储文件(转储文件中存在2个运行时)_.net_Azure_.net Core_Windbg_Sos - Fatal编程技术网

无法在WinDGB中打开Azure应用程序服务.NET Core 2转储文件(转储文件中存在2个运行时)

无法在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

在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
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显示的某些对象不可见)
不过,我需要能够使用WinDGB读取转储,以发现潜在的内存泄漏。我已经花了好几个小时在做这件事,却找不到任何解决办法


任何帮助都将不胜感激!:)

也有类似的问题,并通过运行这些命令修复了它

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行为,但这个问题似乎没有在我们的测试环境中重现。提前谢谢!它起作用了!非常感谢,你为我节省了几个小时的调试时间。