SOS 不支持当前目标架构

Posted

技术标签:

【中文标题】SOS 不支持当前目标架构【英文标题】:SOS does not support the current target architecture 【发布时间】:2013-05-01 14:45:51 【问题描述】:

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

.loadby sos clr
.load wow64exts
!sw
kL

但是,每次我尝试通过 !clrstack 获取托管堆栈时,我都会在标题中看到错误。我错过了什么?

【问题讨论】:

您是否在 Windows 8 机器上运行 WinDbg?我只在 Windows 8 机器上收到相同的错误消息。如果我将内存转储到文件中,即使我执行 !wow64exts.sw 切换到 32 位模式,我也无法运行 SOS。但是,如果我附加到进程,我可以执行 SOS... 【参考方案1】:

我相信您必须使用位于 C:\Windows\SysWOW64\taskmgr.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

【讨论】:

那么,有没有办法使用当前的转储? 上面链接中的一条评论提到运行 !wow64exts.sw,它可以让您运行堆栈相关的命令,例如 !clrstack。我自己从来没有尝试过,因为我已经能够获取一个新的转储。 我将把这个打开一天左右,看看是否有人有一个不是我的答案,否则我会接受这个 @BenG: web.archive.org/web/20160205021908/https://…【参考方案2】:

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

我能够使用来自poizan42 on GitHub 的soswow64 WinDbg 扩展解决这个问题。我是通过this blog entry找到的,它还提供了有关该问题的一些更详细的信息。

【讨论】:

我很确定这应该是现在的答案,但我可能有点偏颇;) @poizan42 非常感谢 soswow64,它让我的工作轻松多了! @poizan42:这是一个很棒的工具,应该引起更多关注。它也适用于最新平台 SDK 的 10.0.17713.1000 的 Windbg。干得好!【参考方案3】:

我一直遵循位数匹配的建议,但直到我看到这篇文章才知道确切原因: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 位进程。确保您的程序平台与 你正在调试。”

【讨论】:

【参考方案4】:

还有一个对我有用的选项: - 我有一个 64 位进程的崩溃转储。 - 所以,首先,我需要进行转储的机器 (C:\Windows\Microsoft.NET\Framework64\v4.0.30319) 中的 SOS.dll 和 mscordacwks.dll。 - 基于两篇msdn文章(http://msdn.microsoft.com/en-gb/library/windows/hardware/ff562263%28v=vs.85%29.aspx,http://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 位故障转储。

【讨论】:

以上是关于SOS 不支持当前目标架构的主要内容,如果未能解决你的问题,请参考以下文章

当前的 .Net SDK 不支持针对 .Net Core 2.2 目标 .Net Core 2.1 或更低版本 [重复]

使用 Blazor Asp.NetCore 托管模板时获取“NETSDK1045 当前的 .NET SDK 不支持 .NET Core 3.0 作为目标”

vs2005调试的时候老是弹出来“没有可用于当前位置可用的源代码”,这个问题怎么解决??

hassos关机

raid配置在当前设置中不受支持

LAMP架构编译安装