C# 调试在64位环境中运行的32位应用程序

C# 调试在64位环境中运行的32位应用程序,c#,debugging,windbg,sos,C#,Debugging,Windbg,Sos,我有一个32位的.Net 4.0应用程序在64位机器的wow64环境中运行 应用程序遇到错误,我在C:\Windows\SysWOW64\taskmgr.exe中存在32位taskmanager时进行转储 我正在使用32位Windebugger分析此转储。我加载了以下DLL 1) .由sos CLR加载 2) 。加载mscordacwks(从客户端计算机) 但我仍然不能使用像这样的SOS命令!clrstack,!线程等 我得到一个错误: 加载数据访问DLL失败,0x80004005 我做错了什么

我有一个32位的.Net 4.0应用程序在64位机器的wow64环境中运行

应用程序遇到错误,我在C:\Windows\SysWOW64\taskmgr.exe中存在32位taskmanager时进行转储

我正在使用32位Windebugger分析此转储。我加载了以下DLL

1) .由sos CLR加载

2) 。加载mscordacwks(从客户端计算机)

但我仍然不能使用像
这样的SOS命令!clrstack,!线程

我得到一个错误: 加载数据访问DLL失败,0x80004005


我做错了什么?

似乎mscordacwks没有正确加载

单程 尝试:

将您的mscordacwks重命名为建议的名称。cordell:

0:000> .cordll
CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3625.dll, Win32 error 0n87
并将重命名的mscordacwks所在的路径添加到符号:

.sympath+ <your-path>
.sympath+
试试你的SOS命令

另一种方式 从Andrew Richard的skydrive获取procdumpext.dll:,将其加载到windbg(
.load procdumpext.dll
)并执行
!加载SOS


祝你好运!:)

mscordacwks似乎没有正确加载

单程 尝试:

将您的mscordacwks重命名为建议的名称。cordell:

0:000> .cordll
CLR DLL status: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3625.dll, Win32 error 0n87
并将重命名的mscordacwks所在的路径添加到符号:

.sympath+ <your-path>
.sympath+
试试你的SOS命令

另一种方式 从Andrew Richard的skydrive获取procdumpext.dll:,将其加载到windbg(
.load procdumpext.dll
)并执行
!加载SOS


祝你好运!:)

如果我不仅从客户机获取mscordacwks.dll,而且还获取sos.dll,那么我得到了最好的结果。我甚至对这些文件有SxS问题,因此从默认的.NETFramework目录获取这些文件也没有帮助。因此,我创建了一个数据库,它可以为您获取所有可能的文件

但是,您仍然需要找出要使用的版本。您可以从查看.NET framework版本开始:

lm vm clr; *** .NET CLR 4
lm vm mscorwks; *** .NET CLR 2
lm vm coreclr; *** Silverlight
(在最坏的情况下,您加载了两个不同版本的.NET,在这种情况下)

一旦您知道确切的版本,就可以通过完整路径加载该版本的SOS

.load c:\mypath\SOS_AMD64_AMD64_4.0.30319.18444.dll
请注意,收集的SOS.dll版本也将重命名,以避免文件名冲突。为了更方便,您可以创建一个副本,然后将其重命名为SOS.dll


如果仍然存在任何mscordacwks.dll问题,您可以按照@lowleveldesign的建议继续。该工具应该已经适当地重命名了数据访问文件。如果您发现任何错误,欢迎反馈。

如果我不仅从客户机获取mscordacwks.dll,而且还从客户机获取sos.dll,我会得到最好的结果。我甚至对这些文件有SxS问题,因此从默认的.NETFramework目录获取这些文件也没有帮助。因此,我创建了一个数据库,它可以为您获取所有可能的文件

但是,您仍然需要找出要使用的版本。您可以从查看.NET framework版本开始:

lm vm clr; *** .NET CLR 4
lm vm mscorwks; *** .NET CLR 2
lm vm coreclr; *** Silverlight
(在最坏的情况下,您加载了两个不同版本的.NET,在这种情况下)

一旦您知道确切的版本,就可以通过完整路径加载该版本的SOS

.load c:\mypath\SOS_AMD64_AMD64_4.0.30319.18444.dll
请注意,收集的SOS.dll版本也将重命名,以避免文件名冲突。为了更方便,您可以创建一个副本,然后将其重命名为SOS.dll


如果仍然存在任何mscordacwks.dll问题,您可以按照@lowleveldesign的建议继续。该工具应该已经适当地重命名了数据访问文件。如果您发现任何错误,欢迎反馈。

。Cordell不显示mscordacwks的名称。它显示为“空载尝试”和!例如线程?它应该类似于:CLRDLL:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.5446 f:0与所需的版本2.0.50727.3625 f:0 CLRDLL:mscordacwks_x86_x86_2.0.50727.3625.dll不匹配另外,您使用的是哪个版本的windbg?在较新的版本中,您可以尝试
!分析-v
,他们应该自动加载有效的sos。Skydrive链接已断开。您有ProcDumpExt的副本吗?它现在似乎名为PDE,在上可用。Cordell不显示mscordacwks的名称。它显示为“空载尝试”和!例如线程?它应该类似于:CLRDLL:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll:2.0.50727.5446 f:0与所需的版本2.0.50727.3625 f:0 CLRDLL:mscordacwks_x86_x86_2.0.50727.3625.dll不匹配另外,您使用的是哪个版本的windbg?在较新的版本中,您可以尝试
!分析-v
,他们应该自动加载有效的sos。Skydrive链接已断开。您有ProcDumpExt的副本吗?它似乎现在被命名为PDE,并在上提供