我有一个在 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/