1

我的设置如下:

  1. 在 64 位 Windows 2003 服务器上运行的 32 位 .net 4.0 网站
  2. 我有 Debug Diagnostic 1.2 设置来监控崩溃
  3. 我还没有自动转储,但正在尝试分析手动转储。
  4. 我有一台安装了 Visual Studio 2010 的 32 位 Windows 7 机器,我试图用它来分析这些转储文件。

我尝试了多种方法来打开它生成的转储文件,但都失败了。

以下是我尝试过的:

1. DebugDiag Win 2003

尝试直接在托管网站的 win 2003 服务器上通过调试诊断使用分析选项卡。我收到以下错误

.NET runtime was loaded in the progress but managed analysis was not done on this dump file because the managed debugger extension commands failed to execue with the below error

CLRDLL: CLRDLL load disabled

CLRDLL: Unable to find mscordacwks_AMD64_AMD64_4.0.30319.1022.sll by mscorwks search
CLRDLL: Unable to find mscordacwks_AMD64_AMD64_4.0.30319.1022.sll on the path
CLRDLL: ERROR: Unable to find mscordacwks_AMD64_AMD64_4.0.30319.1022.dll , win32 error 0n2

2. 调试诊断 Win 7

尝试分析 32 位 windows 7 机器上的转储,我收到以下错误:

DebugDiag Analysis cannot be performed against a 64-but dump file from a 32-bit analysis machine

3. Win 7 x86 上的 WinDbg

尝试在 32 位 widows 7 机器上通过 WinDbg 工具打开转储:

0:000> !clrstack
Failed to load data access DLL, 0x80004005
Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks___.dll is on your symbol path.
            4) you are debugging on the same architecture as the dump file.
                For example, an IA64 dump file must be debugged on an IA64
                machine.

You can also run the debugger command .cordll to control the debugger's
load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
If that succeeds, the SOS command should work on retry.

If you are debugging a minidump, you need to make sure that your executable
path is pointing to mscorwks.dll as well.

尝试在 WinDBG 上运行以下命令注册 mscordwks 并切换到 32 位版本,但仍然不行:

![在此处输入图像描述][2]

.loadby sos mscorkks

.load wow64exts

!sw

.cordll -ve -u -l

4. 视觉工作室 2010

尝试使用 Visual Studio 2010 调试此转储文件,但也无法显示无法显示托管代码或其他内容。


我已经在这上面呆了 10 天,感到非常失望和无助。

任何人都可以阐明这里有什么问题吗?

提前谢谢了。

4

1 回答 1

1

首先,您有一个 64 位转储。我们可以看到这一点,因为 DebugDiag 尝试加载 64 位版本的 mscordacwks。接下来您说您有一个 32 位 Web 应用程序。这对于 .NET 来说已经是一个糟糕的情况。您将无法分析转储。也许你已经使用任务管理器进行了转储,默认情况下会生成这种转储。

要验证是否确实如此,请在 WinDbg 中运行以下命令:

lm m wow64

如果这列出了 Wow64 模块,那么情况就很糟糕。如果这不产生任何输出,则您有一个 64 位应用程序的 64 位转储,这是一个更好的情况。但是,您需要 64 位版本的 WinDbg 来分析它,否则您将无法加载 64 位 SOS 扩展。您还需要 64 位版本的 DebugDiag 来分析它(请参阅您的错误消息)。

如果您键入 .WinDbg 应该下载正确版本的 SOS 和 mscordacwks !analyze -v。DebugDiag 也会尝试下载它。如果这不起作用,请从原始机器获取必要的文件,例如使用Mscordacwkscollector

其他一些注意事项:

  1. 同时还有DebugDiag 2.1,它可能会产生更好的结果。
  2. 确保正确键入命令:.loadby sos mscorkks不起作用。.loadby sos mscorwks甚至对于.loadby sos clr.NET 4
  3. 您上传了一张图片,但删除了相应的链接。也许您想编辑您的帖子并再次上传图片。使用预览查看它是否存在。
于 2014-07-19T11:36:41.920 回答