SOS 不支持当前目标架构

问题描述 投票:0回答:5

我正在尝试使用 Windbg 研究在 x64 计算机上为我们的 x86 进程创建的挂起转储文件。这是一个 4.0 x86 应用程序,因此为了获得非托管堆栈,我必须执行以下操作:

.loadby sos clr
.load wow64exts
!sw
kL

但是,每次我尝试通过

!clrstack
获取托管堆栈时,我都会收到标题中的错误。我错过了什么?

c# .net-4.0 windbg dump freeze
5个回答
32
投票

我相信您必须使用位于 C:\Windows\SysWOW64 askmgr.exe 的 32 位任务管理器来获取 32 位转储。

更多信息在这里:http://blogs.msdn.com/b/tess/archive/2010/09/29/capturing-memory-dumps-for-32-bit-processes-on-an-x64-machine。 ASPX


21
投票

正如其他人已经说过的,这可能是由 64 位应用程序(例如默认任务管理器)创建 32 位进程的转储文件引起的。

我能够使用 GitHub 上poizan42 的 soswow64 WinDbg 扩展解决该问题。我通过此博客条目找到了它,其中还提供了有关该问题的一些更详细的信息。


6
投票
我一直遵循位数匹配的建议,但一直不知道具体原因,直到我看到这篇文章:

http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash -dump-and-live-process-inspection.aspx 其中指出:

“DAC 具有标准化接口,调试器使用它来 获取有关这些抽象状态的信息,例如, 托管堆。使用与CLR匹配的DAC至关重要 您想要的进程或故障转储的版本和体系结构 检查。”

并且

“注意DAC是原生DLL,必须加载到程序中 使用 ClrMD。如果转储或实时进程是 32 位,则必须 使用 32 位版本的 DAC,这意味着您的 检查程序也需要是32位的。对于 64 位进程。确保您的程序的平台匹配 您正在调试。”


3
投票
还有一个对我有用的选择: - 我有 64 位进程的故障转储。 - 因此,首先,我需要来自进行转储的计算机 (C:\Windows\Microsoft.NET\Framework64 4.0.30319) 中的 SOS.dll 和 mscordacwks.dll。 - 基于两篇 msdn 文章(

http://msdn.microsoft.com/en-gb/library/windows/hardware/ff562263%28v=vs.85%29.aspxhttp://msdn.microsoft。 com/en-gb/library/windows/hardware/ff540665%28v=vs.85%29.aspx),我这样加载CLR:

.cordll -u -ve -I clr -lp <path to SOS.dll & mscordacwks.dll>

此后,!threads 工作了。我认为,同样适用于 32 位故障转储。


0
投票
就我而言,我有:

    一个 .Net Framework 4.6 应用程序,针对 x86。
  • 该应用程序正在 Windows 10 64 位上运行和调试。
  • 我正在使用 sysinternals procdump 来获取内存转储。
我想要遵循的 WinDbg 步骤是:

  1. 启动WinDbg。

  2. 加载内存转储文件。

  3. 运行WinDbg命令:

    !分析-v

    .cordll
    .effmach
    !clrstack

我遇到了一些不同的错误。

  • CLR DLL 状态:没有加载尝试

  • SOS 不支持当前的目标架构(8664)。

    0:000> .loadby sos clr

    调用LoadLibrary(C:\Windows\Microsoft.NET\Framework 4.0.30319\sos.dll)失败,Win32错误0n193
    “%1 不是有效的 Win32 应用程序。”
    请检查您的调试器配置和/或网络访问。
    错误:无法加载扩展 C:\Windows\Microsoft.NET\Framework 4.0.30319\sos.dll

我的解决方法是使用 x86 adplus.exe 获取内存转储。此后,WinDbg 按预期工作。

mkdir c:\procdumps cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x86 adplus.exe -hang -pn MyApp.exe -o c:\procdumps\ -quiet
    
© www.soinside.com 2019 - 2024. All rights reserved.