在windbg中调试挂起转储的问题



加载sosex后,出现以下错误。什么好主意吗?挂起转储来自32位的机器,我的是64位的。我需要安装什么吗?

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

问题是您机器上的mscordwks版本与崩溃转储中的版本不同。这不是位问题——即使你的机器是64位的,你也安装了一个32位的。net。我的是C:Windows microt.net Frameworkv2.0.50727.

你的拷贝不会有那么长的名字,它就叫做mscordacwks.dll。当调试器看到你的"活动"副本不同时,它会搜索具有长名称的副本(避免dll地狱),这也会告诉你需要获得哪个版本。在我得到正确的mscordacwks.dll(例如从原始机器)之后,我将其复制到我的框架目录中,并将其命名为错误消息中显示的名称。我还设置了windbg的图像路径以包含框架目录。

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

你会发现网上到处都是关于如何获得该dll的各种版本的问题。假设您无法从创建崩溃转储的机器中获得一个,并且它不会从微软符号服务器下载,我过去所做的是搜索microsoft.com的mscordacwks和我需要的版本(例如2.0.50727.3623)。它通常存在于你可以下载的安全补丁中。

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

当您遇到CAB文件时,有时最好使用expand.exe,因为它可以解压缩7zip (v4.65)不能解压缩的文件。如果使用7zip打开具有_manifest_.cix.xml的CAB,则使用expand代替,因为它使用清单来提取、解压缩和重命名内容。7zip(对…进行简单的解压缩)将原始文件保留为一堆以数字命名的文件,如字面上的1、2等。这些文件可能仍然是压缩的。您知道的方式是,如果您打开它们(例如使用SciTE),它们将以类似PA30的签名开始(它将匹配来自清单的源"type"属性)。

相关内容

  • 没有找到相关文章

最新更新