1

我是 WinDbg 的新手,从 64 位 Windows 2008 服务器上的 WER ReportQueue 文件夹中获得了这个转储。我需要检查转储,并希望在我安装了 Windows 调试工具包的开发人员机器上进行检查。当我尝试加载 SOS 时,出现以下我从未见过的错误:

0:035> .loadby sos mscorwks
The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos) failed, Win32 error 126
    "The specified module could not be found."
Please check your debugger configuration and/or network access.

我的机器运行的是 32 位 Windows 7,它显然没有 Framework64 文件夹。

我需要一些建议来指出我正确的方向。如果我想在 32 位机器上检查 64 位进程的转储,我需要做什么?是否有可能做到这一点?

提前非常感谢!

4

2 回答 2

12

如果要分析 64 位进程转储,则需要在 64 位机器上运行 64 位版本的调试器。可以在 32 位和 64 位机器上分析来自 32 位进程的转储。因此,如果您确定转储来自 64 位进程,则需要在 64 位机器上对其进行分析。

于 2009-08-27T16:59:39.803 回答
3

问题不在于您可以从 32 位 WinDbg 分析 64 位转储。从 WinDbg 帮助文件:

如果您正在分析转储文件,并且转储文件是在 Windows XP 或更高版本的 Windows 上制作的,则可以使用 32 位包或 x64 包。(转储文件是用户模式转储文件还是内核模式转储文件并不重要,转储文件是在基于 x86 还是基于 x64 的平台上制作的也不重要。)

如果您正在分析转储文件,并且转储文件是在 Windows 2000 操作系统上制作的,则应使用 32 位软件包。(转储文件是用户模式转储文件还是内核模式转储文件并不重要)

如果您正在执行实时内核模式调试,并且目标计算机正在运行 Windows XP 或更高版本的 Windows,则可以使用 32 位包或 x64 包。(这种情况适用于基于 x86 和基于 x64 的目标。)

如果您正在执行实时内核模式调试,并且目标计算机正在运行 Windows 2000,则应使用 32 位软件包。

如果您正在执行实时用户模式调试,请使用 x64 包来调试具有 64 位和 32 位代码的 WOW64。要调试其他目标,请使用 32 位调试器来调试 32 位代码。

问题是什么?在这里,您尝试加载 64 位扩展来分析问题。无法在 32 位 WinDbg 上加载 64 位扩展。那么问题来了 32 位版本的 SOS 是否支持 64 位分析,你能强制 WinDbg 使用 32 位 SOS 吗?

您可以使用强制加载特定版本的 SOS

根据http://msdn.microsoft.com/en-us/library/bb190764.aspx加载

但是我希望 32 位版本无法分析 64 位进程,虽然没有尝试过。

于 2011-09-12T23:45:16.990 回答