c# - 在 WinDbg 中分析 CLR .dmp 文件

标签 c# debugging windbg

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

我已经能够从 PC 获取 .dmp 文件并将其带回我的 Windows 7 64 位开发 PC 并将其加载到 WinDbg 6.12。

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

!analyze -v 的结果如下。

我在与 .DMP 相同的目录中有相关的 EXE、DLL 和 PDB 文件。崩溃的可执行文件是在 Debug模式下编译的。

我还有 Visual Studio 2008,如果它更容易使用的话。但是打开那里的转储文件也只显示 native 调用堆栈,我的代码中没有任何内容。

如何查看 CLR 调用堆栈?

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
---------

最佳答案

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

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

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

关于c# - 在 WinDbg 中分析 CLR .dmp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123960/

相关文章:

c# - 从右到左的工具提示文本 c#

c# - 替换 proxyAddresses 值

javascript - 如何分析 JQuery/JQGrid

c++ - LLDB - 如何打印全局变量的值?

c++ - 由于生成后步骤,未加载 native dll 的符号 (pdb)

c# - Metro 获取 StorageFile 的 base64 字符串

javascript - Firebug 不会在更改的 JavaScript 上刷新缓存

windbg - Adplus 转储创建失败 - 访问被拒绝

debugging - 如何让 WinDbg 在遇到断点时播放声音?

C# winforms : graphics. DrawImage 问题