调试windbg中的挂起转储问题

时间:2011-09-21 12:12:38

标签: debugging windbg postmortem-debugging

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

!clrstack

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

1 个答案:

答案 0 :(得分:4)

问题是您机器上的mscordacwks版本与崩溃转储版本不同。这不是一个小问题 - 即使你的机器是64位,你安装了32位.NET。我的目标是C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727。

你拥有的副本不会有那么长的名字,它只会被称为mscordacwks.dll。当调试器看到你的“活动”副本不同时,它会搜索一个长名称(避免dll地狱)并且还告诉你需要获得什么版本。在我获得正确的mscordacwks.dll(例如来自原始机器)之后,我将其复制到我的框架目录中,并将其命名为错误消息中显示的内容。我还设置了windbg的图像路径以包含框架目录。

sos必须使用mscordacwks框架程序集来理解内存数据结构。这一点在博客文章“Failed to load data access DLL, 0x80004005” – OR – What is mscordacwks.dll?中对来自黑暗角落博客的笔记进行了解释。

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

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

当您点击CAB文件时,有时最好使用expand.exe,因为它可以解压缩文件7zip(v4.65)没有。如果您使用具有_manifest_.cix.xml的7zip打开CAB,请使用expand,因为它使用清单来提取,解压缩和重命名内容。 7zip(做一个简单的提取到...)将它保留为原始的,用数字命名的文件串,字面上1,2,等等。这些文件可能仍然被压缩。你知道的方式是你打开它们(例如使用SciTE),它们将以PA30之类的签名开始(它将与清单中的源“type”属性相匹配)。