首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WinDbg中分析CLR .dmp文件

在WinDbg中分析CLR .dmp文件
EN

Stack Overflow用户
提问于 2011-02-26 07:47:01
回答 3查看 14.6K关注 0票数 4

我有一个在Visual Studio2008中创建的C# .NET 3.5应用程序,它在没有开发环境的Windows XP SP3 (x86) PC上崩溃。

我已经能够从PC上获取.dmp文件,并将其带回我的Windows7 64位开发PC,然后将其加载到WinDbg 6.12中。

但是,我在C#应用程序的调用堆栈中看不到任何代码。它看起来完全是一个本地调用堆栈。

!analyze -v的结果如下所示。

我把相关的EXE,DLL和PDB文件和.DMP放在同一个目录下,崩溃的可执行文件是在调试模式下编译的。

我还有2008年的Visual Studio,如果更容易使用的话。但是打开其中的转储文件也只会显示一个本地调用堆栈,而不是我的代码中的内容。

如何查看CLR调用堆栈?

代码语言:javascript
运行
复制
0:004> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


FAULTING_IP:
kernel32!RaiseException+53
7c812afb 5e              pop     esi

EXCEPTION_RECORD:  0392f018 -- (.exr 0x392f018)
ExceptionAddress: 7c812afb (kernel32!RaiseException+0x00000053)
   ExceptionCode: e0434f4d (CLR exception)
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 80070057

PROCESS_NAME:  foo.exe

ERROR_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>

EXCEPTION_CODE: (NTSTATUS) 0xe0434f4d - <Unable to get error code text>

EXCEPTION_PARAMETER1:  80070057

MOD_LIST: <ANALYSIS/>

MANAGED_STACK: !dumpstack -EE
No export dumpstack found

MANAGED_BITNESS_MISMATCH:
Managed code needs matching platform of sos.dll for proper analysis. Use 'x86' debugger.

ADDITIONAL_DEBUG_TEXT:  Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD]

LAST_CONTROL_TRANSFER:  from 79ef2bfc to 7c812afb

FAULTING_THREAD:  ffffffff

DEFAULT_BUCKET_ID:  STACKIMMUNE

PRIMARY_PROBLEM_CLASS:  STACKIMMUNE

BUGCHECK_STR:  APPLICATION_FAULT_STACKIMMUNE_NOSOS_CLR_EXCEPTION

STACK_TEXT:
00000000 00000000 foo.exe+0x0


SYMBOL_NAME:  foo.exe

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: foo

IMAGE_NAME:  foo.exe

DEBUG_FLR_IMAGE_TIMESTAMP:  4d5da0cd

STACK_COMMAND:  ** Pseudo Context ** ; kb

FAILURE_BUCKET_ID:  STACKIMMUNE_e0434f4d_foo.exe!Unknown

BUCKET_ID:  APPLICATION_FAULT_STACKIMMUNE_NOSOS_CLR_EXCEPTION_foo.exe

Followup: MachineOwner
---------
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-27 08:15:42

托管代码需要一个匹配的sos.dll平台才能进行适当的分析。使用“x86”调试器。

您必须使用x86调试器/WinDbg来调试x86内存转储。使用.loadby sos mscorwks加载适当的sos。您还可以使用.chain命令验证扩展是否正确加载。

Tess有一些很好的调试教程。

票数 6
EN

Stack Overflow用户

发布于 2011-02-26 08:31:23

要了解一些WinDbg命令,This tutorial是一个很好的开始。我认为下面的命令应该会显示当前的堆栈跟踪:

代码语言:javascript
运行
复制
.sympath SRV*d:\localsymbols*http://msdl.microsoft.com/download/symbols
!reload
.loadby sos mscorwks
K
票数 3
EN

Stack Overflow用户

发布于 2011-02-26 07:54:11

在WinDbg中调试托管崩溃转储需要额外的模块(主要是SOS.dll)和命令。

一些不错的起始链接是here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5123960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档