1

加载 sosex 后,出现以下错误。有任何想法吗?挂起转储来自 32 位机器,我的是 64 位的。我需要安装一些东西吗?

!clrstack

CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3623.dll, Win32 error 0n2
4

1 回答 1

4

问题是您机器上的 mscordacwks 版本与故障转储中的版本不同。这不是位问题 - 即使您的机器是 64 位,您也安装了 32 位 .NET。我的位于 C:\Windows\Microsoft.NET\Framework\v2.0.50727 下。

您拥有的副本不会有那么长的名称,它只会被称为 mscordacwks.dll。当调试器发现您的“活动”副本不同时,它会搜索具有长名称的副本(避免 dll 地狱),并且还会告诉您需要获取的版本。在我得到正确的 mscordacwks.dll(例如从原始机器)后,我将它复制到我的框架目录中,并按照错误消息中显示的那样命名它。我还将windbg的图像路径设置为包含框架目录。

sos 必须使用 mscordacwks 框架程序集来理解内存中的数据结构。这一切都在博文“加载数据访问 DLL 失败,0x80004005”中进行了解释——或者——什么是 mscordacwks.dll?在一个黑暗角落博客的笔记上。

您会发现互联网上充斥着关于如何获取该 dll 的各种版本的问题。假设您无法从创建故障转储的机器上获取它,并且它没有从微软符号服务器下载,我过去所做的是在 microsoft.com 搜索 mscordacwks 和我需要的版本(例如 2.0.50727.3623)。它通常在您可以下载的安全补丁中。

如果您没有合适的系统来安装它,我很幸运能用 7zip 打开安装 exe。我在 cab 中找到了 mscordacwks 文件,该文件位于安全补丁安装可执行文件中的补丁文件(MSP 文件)中。每一个都可以用 7zip 打开。

当您点击 CAB 文件时,有时最好使用 expand.exe,因为它可以解压缩 7zip (v4.65) 无法解压缩的文件。如果您使用 7zip 打开一个带有_manifest_.cix.xml. 7zip(对...进行简单的提取)将其保留为原始文件,并带有一堆以数字命名的文件,字面意思是 1、2 等。这些文件可能仍被压缩。您知道的方式是,如果您打开它们(例如使用 SciTE),它们将以 PA30 之类的签名开始(它将匹配清单中的源“类型”属性)。

于 2011-10-03T21:39:07.143 回答