检查非托管线程中的托管异常 [英] Examining a managed exception in an unmanaged thread

查看:0
本文介绍了检查非托管线程中的托管异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在查看一个小型转储文件,其中主线程(c++)利用CLR启动托管(C#.NET)窗口,托管部分抛出异常,并使应用程序崩溃。我一直在四处寻找检查异常详细信息以寻找线索的技术,但它们主要针对其中之一(完全非托管堆栈&;线程或完全托管堆栈&;线程)。

下面是托管调用堆栈的一部分,我可以看到.NET部分内部引发了异常,但我真的不确定有什么方法可以深入查看引发的细节。我在挖掘.dmp文件方面还是个新手,所以我非常感激任何指导。

001ddb04 68b92a42 KERNELBASE!RaiseException+0x58
001ddba8 68c655ef clr!RaiseTheExceptionInternalOnly+0x276
001ddbd8 68c6de52 clr!UnwindAndContinueRethrowHelperAfterCatch+0x83
001ddc6c 627528df clr!CEEInfo::resolveToken+0x59b
001ddc7c 62778872 clrjit!Compiler::impResolveToken+0x3a
001de3ac 62751d53 clrjit!Compiler::impImportBlockCode+0x29b3
001de42c 62751f48 clrjit!Compiler::impImportBlock+0x5f
001de444 62753405 clrjit!Compiler::impImport+0x235
001de464 62753635 clrjit!Compiler::compCompile+0x63
001de4a0 62753823 clrjit!Compiler::compCompileHelper+0x2fa
001de518 627536f6 clrjit!Compiler::compCompile+0x213
001de608 6275385f clrjit!jitNativeCode+0x1e3
001de62c 68a74710 clrjit!CILJit::compileMethod+0x25
001de67c 68a747a9 clr!invokeCompileMethodHelper+0x41
001de6bc 68a747eb clr!invokeCompileMethod+0x31
001de720 68a73684 clr!CallCompileMethodWithSEHWrapper+0x2a
001deab8 68a73920 clr!UnsafeJitFunction+0x3ca
001deb94 68a81e5e clr!MethodDesc::MakeJitWorker+0x36b
001dec08 68a550b6 clr!MethodDesc::DoPrestub+0x59d
001dec70 68a44279 clr!PreStubWorker+0xed
001deca0 16c5185a clr!ThePreStub+0x16
001deda4 5ae8f887 0x16c5185a
001dedc0 5ae20c9c MYDLL!CLoader::InvokeCSharpControl

推荐答案

0x16c5185a是内存中由JIT编译器编译.NET代码的地址。由于实时编译,没有像C++那样的符号,您需要不同的工具(WinDbg的扩展)。

首先,使用.exr -1检查它是否是.NET异常。除少数例外情况外,代码应为0xE0434F4D(.COMASCII字符)。

如果是这样,加载SOS扩展以分析.NET详细信息:.loadby sos clr。接下来,运行命令!PrintException(简称为!pe)以获取有关异常的详细信息,并运行!ClrStack(大小写无关)以获取有关.NET调用堆栈的详细信息。

如果您have a good crash dump for .NET,可能会有更多详细信息。

这篇关于检查非托管线程中的托管异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆