Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Iis 如何使用WinDBG和SOS调试进程内托管的ASP.Net核心应用程序?_Iis_Asp.net Core_Windbg_Azure Web App Service - Fatal编程技术网

Iis 如何使用WinDBG和SOS调试进程内托管的ASP.Net核心应用程序?

Iis 如何使用WinDBG和SOS调试进程内托管的ASP.Net核心应用程序?,iis,asp.net-core,windbg,azure-web-app-service,Iis,Asp.net Core,Windbg,Azure Web App Service,我有一个ASP.NETCore2.2应用程序,目标是.NETCore2.2。我在Azure应用程序服务上使用新的。 然后我通过应用服务诊断工具创建内存转储。使用VisualStudio打开它,我看到两个CLR版本:4.7.3190.0;4.6.27110.4. 我可以看出4.7.3190.0适用于.Net框架,4.6.27110.4适用于.Net核心。 如果我在WinDBG中打开转储,它将继续加载4.7.3190.0的mscordacwks DLL。我没有办法让它加载4.6.27110.4的ms

我有一个ASP.NETCore2.2应用程序,目标是.NETCore2.2。我在Azure应用程序服务上使用新的。 然后我通过应用服务诊断工具创建内存转储。使用VisualStudio打开它,我看到两个CLR版本:4.7.3190.0;4.6.27110.4. 我可以看出4.7.3190.0适用于.Net框架,4.6.27110.4适用于.Net核心。 如果我在WinDBG中打开转储,它将继续加载4.7.3190.0的mscordacwks DLL。我没有办法让它加载4.6.27110.4的mscordacore DLL。因此,一个简单的SOS命令,如
!线程
导致错误
请求线程存储失败

如何使用WinDBG和SOS调试托管代码(.Net核心部分)

您可以获得示例内存转储

更新 谢谢你的大力帮助!这种情况的解决方案是运行
.cordell-u-I coreclr-l-lp“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\”
。我必须在一个命令中卸载(
-u
)CLR DAC并加载(
-l
)核心CLR DAC


成功的命令和日志是。

一般来说,我会说,看看这个命令。具体来说,

0:000> .cordll -u
CLR DLL status: No load attempts
要卸载CLR DAC,请执行以下操作:

0:000> .cordll -I coreclr -l -lp "C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\"
CLR DLL status: Loaded DLL f:\debug\symbols\mscordaccore_AMD64_AMD64_4.6.27110.04.dll\5BE756335c6000\mscordaccore_AMD64_AMD64_4.6.27110.04.dll
从特定路径加载.NET核心DAC


在崩溃转储中,有两个CLR版本:

0:000> lm m *clr
start             end                 module name
00007ffc`ac990000 00007ffc`acf56000   coreclr    (deferred)             
00007ffc`c2130000 00007ffc`c2b1d000   clr        (deferred)
详情如下:

0:000> lmvm clr
[...]
    File version:     4.7.3190.0
0:000> lmvm coreclr
[...]
    File version:     4.6.27110.4
正如VisualStudio所示

如果您执行常规的
.loadby sos clr
,它将从
clr
所在的位置加载4.7版本的sos。不幸的是,
.loadby sos coreclr
的工作方式将不同,因为.NET Core的调试支持与.NET的调试支持方式不同

0:000> .loadby sos coreclr
The call to LoadLibrary(D:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\sos) failed
Win32 error 0n126 "The specified module could not be found."
如果已安装匹配的.NET Core软件包,则在路径中会有一些SOS版本,如
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\
。然后可以从该路径显式加载扩展:

0:000> .load C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\sos.dll
确保卸载CLR的SOS:

0:000> .unload C:\...\sos.dll

并使用
.chain
检查是否只加载了一个SOS。

您应该为应用程序服务禁用ASP.NET 4.x,以消除.NET Framework噪音。NET Core调试应该遵循@LexLi:你能教我如何为我的应用程序服务禁用ASP.NET 4.x吗?我只能在门户中选择3.5和4.7,但无法禁用它。谢谢。但是你能分享一下关于
.cordell-u-l-lp
的模式细节吗?我运行了
.cordell-u-l-lp“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0”
,得到了
CLR DLL状态:加载的DLL C:\ProgramData\Dbg\sym\mscordacwks\u AMD64\u AMD64\u AMD64\u 4.7.3190.00.DLL\5B693B489ed000\mscordacwks\u AMD64\u 4.7.3190.00.DLL
。和
!线程
仍然返回
请求线程存储失败
。谢谢,但它仍然不起作用。以下是控制台日志
0:000>.unload
卸载MexOMStub扩展DLL
0:000>.cordell-u-l-lp“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0”
CLR DLL状态:加载的DLL C:\ProgramData\Dbg\sym\mscordacwks\U AMD64\U AMD64\U 4.7.3190.00.DLL\5B693B489ed000\mscordacwks\U AMD64\U 4.7.3190.00.DLL
似乎新的WinDbg(引擎版本10.0.18309.1000)继续加载
mscordacwks\u AMD64\u AMD64\u 4.7.3190.00.dll
。我已将
的输出放入.chain
。即使在我显式运行
。unload MexOMStub
。unload DbgEngCoreDMExt之后,
卸载C:\ProgramData\Dbg\sym\SOS\u AMD64\u AMD64\u 4.7.3190.00.dll\5B693B489ed000\SOS\u AMD64\u AMD64\u 4.7.3190.00.dll
。加载C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.0\SOS.dll
。chain
返回,
.cordell
仍然返回
CLR DLL状态:加载的DLL C:\ProgramData\Dbg\sym\mscordacwks\U AMD64\U AMD64\U 4.7.3190.00.DLL\5B693B489ed000\mscordacwks\U AMD64\U AMD64\U 4.7.3190.00.DLL