【问题标题】:Which version of sos and clr/mscorwks.dll to load?要加载哪个版本的 sos 和 clr/mscorwks.dll?
【发布时间】:2015-01-29 23:02:53
【问题描述】:

我有一个托管在 64 位机器上的 32 位应用程序(针对 .NET 3.5)。我想分析这个 32 位应用程序的内存转储。我使用 32 位 adplus 和 cdb 捕获了内存转储。我正在将内存转储加载到 32 位 windbg 中。当我将 .net 2.0 sos.dll 和 .net 2.0 mscorwks.dll 加载到 windbg 并执行 !clrstack 时,我收到以下错误:“找不到运行时 DLL (mscorwks.dll),0x80004005 扩展命令需要 mscorwks.dll 才能有事可做。”我做错了什么?

cmets 中要求的信息

ADPlus 命令行:

adplus -hang -quiet -p 2440 -o C:\temp

WinDbg 命令:

0:000> .load <fullpathto>\sos.dll

0:000> lmvm mscorwks
start    end        module name

0:000> .exr -1
ExceptionAddress: 00000000
   ExceptionCode: 80000007 (Wake debugger)
  ExceptionFlags: 00000000
NumberParameters: 0

【问题讨论】:

  • 这意味着在 target(转储)中找不到 mscorwks.dll。您不会将 mscorwks.dll 加载到调试器中。 “lmvm mscorwks”的输出是什么?您可能处于 .NET 3.5(仍使用 2.0 运行时)尚未在目标进程中初始化的情况。
  • 我还应该问另一个问题。 “lmvm clr”的输出是什么?
  • 您不需要将 mscorwks.dll 加载到 WinDbg 中。它在那里什么都不做。它应该加载到您的进程中(可能不是),而不是在调试器中。您使用哪个命令加载 SOS?您使用哪个命令来启动 AdPlus?您可能是初始断点的受害者。 .exr -1 的输出显示了什么?请将该信息添加到问题中。
  • @Steve: lmvm 的输出 mscorwks: start end modulename
  • @thomas:>>您使用哪个命令加载 SOS?.load 后跟 sos dll 的位置。 >>您使用哪个命令来启动 AdPlus? adplus -hang -quiet -p 2440 -o C:\temp. > .exr -1 的输出显示什么? ExceptionAddress:00000000 ExceptionCode:80000007(唤醒调试器)ExceptionFlags:00000000 NumberParameters:0

标签: windbg asp.net-3.5 sos


【解决方案1】:

转储表明没有加载 .NET 2。否则lmvm mscorwks 的输出应该显示 .NET 运行时的详细信息,如下所示:

0:003> lmvm mscorwks
start    end        module name
61bc0000 6216e000   mscorwks   (deferred)             
    Image path: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    ...
    File version:     2.0.50727.5485
    ...

您提到您通过完整路径加载了 SOS。如果转储是在您的机器上进行的,您通常会使用

0:003> .loadby sos mscorwks    

在您的情况下,这应该已经提示您未加载 .NET:

Unable to find module 'mscorwks'

如果您对 .NET 版本不太确定,请尝试

.loadby sos clr; *** .NET 4
.loadby sos coreclr; *** Silverlight / Universal Apps

您的 AdPlus 命令行中可能有错字并指定了错误的进程 ID。如果该 PID 意外存在,则您得到了错误的转储。使用|查看进程名

0:003> |
.  0    id: 1e78    attach  name: E:\...\NET2x32.exe

BTW:ADPlus 的-quiet 参数已过时,可以省略。

【讨论】:

  • mscorwks.dll 和 clr.dll 有什么区别?
  • @EhsanSajjad:mscorwks.dll 是 .NET CLR 2(.NET 2.0、3.0 和 3.5),clr.dll 是 .NET CLR 4(.NET 4.0、4.5)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多