首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >要加载哪个版本的sos和clr/mscowks.dll?

要加载哪个版本的sos和clr/mscowks.dll?
EN

Stack Overflow用户
提问于 2015-01-29 23:02:53
回答 1查看 4.1K关注 0票数 0

我有一个托管在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才能完成某些事情。”我做错了什么?

按备注中的要求提供信息

ADPlus命令行:

代码语言:javascript
运行
复制
adplus -hang -quiet -p 2440 -o C:\temp

WinDbg命令:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 20:46:25

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

代码语言:javascript
运行
复制
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。如果转储是在您的计算机上进行的,您通常会使用

代码语言:javascript
运行
复制
0:003> .loadby sos mscorwks    

在您的示例中,这应该已经给出了.NET未加载的提示:

代码语言:javascript
运行
复制
Unable to find module 'mscorwks'

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

代码语言:javascript
运行
复制
.loadby sos clr; *** .NET 4
.loadby sos coreclr; *** Silverlight / Universal Apps

也许您的AdPlus命令行中有一个错误的错误,并指定了错误的进程ID。如果这个PID不小心存在,您就得到了错误的转储。使用|检查进程名

代码语言:javascript
运行
复制
0:003> |
.  0    id: 1e78    attach  name: E:\...\NET2x32.exe

顺便说一句:-quiet参数ADPlus是过时的,您可以省略它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28226337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档