Jer*_*ent 3 .net windbg sos azure .net-core
我在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读取转储,以发现潜在的内存泄漏。我已经花了好几个小时来研究它,却找不到任何解决方案。
任何帮助将不胜感激!:)
发生了类似的问题,并通过运行这些命令修复了该问题。
您是正确的,因为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
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |