c# - 检查非托管线程中的托管异常

标签 c# c++ exception windbg crash-dumps

我正在查看一个小型转储文件,其中主线程 (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 异常。除了少数异常(exception),代码应为 0xE0434F4D(.COM,ASCII 字符)。

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

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

关于c# - 检查非托管线程中的托管异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999823/

相关文章:

c# - 存在数据时添加 ID 列的简便方法

c++ - 没有指针的递归结构? (霍夫曼)

java - BindException 多线程服务器

c++ - 线程之间的异常。我需要多少 std::exception_ptr 和同步?

c# - 为电子邮件附件使用多个内存流

c# - WPF 数据网格样式

c++ - "Search words/strings in Matrix of Char"算法的复杂度

c++ - OOP设计:一个对象依赖于其所有依赖项的存在

Java List.add() UnsupportedOperationException

c# - 属性、索引器或动态成员访问不能作为 out 或 ref 参数传递?