【问题标题】:Debugging 32 bit application running in 64 bit environment调试在 64 位环境中运行的 32 位应用程序
【发布时间】:2014-02-18 11:43:48
【问题描述】:

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

应用程序遇到错误,我使用 C:\Windows\SysWOW64\taskmgr.exe 中存在的 32 位任务管理器进行了转储

我正在使用 32 位 Windebugger 来分析这个转储。我加载了以下 dll。

1).loadby sos CLR

2).load mscordacwks(从客户端机器)。

但我仍然无法使用 !clrstack,!threads 等 SOS 命令。

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

我做错了什么?

【问题讨论】:

    标签: c# debugging windbg sos


    【解决方案1】:

    似乎 mscordacwks 没有正确加载

    一种方式

    试试:

    .cordll -u -ve -lp <absolute-path-to-directory-where-client-mscordacwks-is-placed>
    

    正确的输出应该是:

    CLRDLL: Loaded DLL <your-path>\mscordacwks.dll
    CLR DLL status: Loaded DLL <your-path>\mscordacwks.dll
    

    如果你看到:

    CLR DLL status: No load attempts
    

    将您的 mscordacwks 重命名为 .cordll 建议的名称:

    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>
    

    并尝试您的 SOS 命令。

    其他方式

    从 Andrew Richard 的 skydrive 获取 procdumpext.dll:http://sdrv.ms/11C7S9c,将其加载到 windbg (.load procdumpext.dll) 并执行 !loadsos

    祝你好运! :)

    【讨论】:

    • .cordll 不显示 mscordacwks 的名称。它显示为“无加载尝试”
    • 和 !threads 例如?它应该类似于: 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 由 mscorwks 搜索
    • 另外,你使用的是哪个版本的windbg?在较新的版本中,您可以尝试!analyse -v,它们应该会自动加载有效的 sos。
    • Skydrive 链接已损坏。你有 ProcDumpExt 的副本吗?
    • 这似乎现在被命名为 PDE 并且可以在onedrive.live.com/…上找到
    【解决方案2】:

    如果我不仅从客户端计算机获得 mscordacwks.dll 还获得 sos.dll,我的结果最好。我什至对这些文件有 SxS 问题,因此从默认的 .NET 框架目录中获取文件也没有帮助。因此我创建了mscordacwks collector,它可以为您获取所有可能的文件。

    但是,您仍然需要找出要使用的版本。您可以先查看 .NET 框架版本:

    lm vm clr; *** .NET CLR 4
    lm vm mscorwks; *** .NET CLR 2
    lm vm coreclr; *** Silverlight
    

    (在最坏的情况下,您加载了两个不同版本的 .NET,在这种情况下 you are out of luck)。

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

    .load c:\mypath\SOS_AMD64_AMD64_4.0.30319.18444.dll
    

    请注意,收集的 SOS.dll 版本也将被重命名以避免文件名冲突。为了更方便,您可以创建一个副本并将其重命名为 SOS.dll。

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

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多