SOS不支持当前的目标体系结构

Jus*_*ony 23 c# windbg dump .net-4.0 hang

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

.loadby sos clr
.load wow64exts
!sw
kL
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试通过!clrstack标题获取托管堆栈时,我都会收到错误.我错过了什么?

try*_*dis 26

我相信你将不得不使用位于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


Tam*_*zma 16

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

我能够使用GitHub上的poizan42中的soswow64 WinDbg扩展来解决问题.我通过这篇博客文章找到了它,它还提供了有关该问题的更详细信息.

  • 我很确定这应该是现在的答案,但是我可能有点偏颇;) (3认同)
  • @ poizan42非常感谢soswow64,它使我的工作变得如此轻松! (2认同)
  • @ poizan42:那是一个很棒的工具,应该引起更多关注。它也可以与最新平台SDK的10.0.17713.1000的Windbg一起使用。做得好! (2认同)

Mar*_*man 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位进程也是如此.确保程序的平台与您正在调试的程序相匹配."