C# 检查非托管线程中的托管异常 我正在查看一个迷你转储文件,其中主线程C++利用CLR启动托管C.NET窗口,在托管部分中抛出异常,并使应用程序崩溃。我一直在寻找一些技术来检查异常细节以寻找线索,但是它们主要针对一个或另一个,即完全非托管的堆栈和线程或完全托管的堆栈和线程

C# 检查非托管线程中的托管异常 我正在查看一个迷你转储文件,其中主线程C++利用CLR启动托管C.NET窗口,在托管部分中抛出异常,并使应用程序崩溃。我一直在寻找一些技术来检查异常细节以寻找线索,但是它们主要针对一个或另一个,即完全非托管的堆栈和线程或完全托管的堆栈和线程,c#,c++,exception,windbg,crash-dumps,C#,C++,Exception,Windbg,Crash Dumps,下面是托管调用堆栈的一部分,在这里我可以看到在.NET部分中引发了异常,但我不确定有什么方法可以深入查看引发的细节。我还不太熟悉.dmp文件,所以非常感谢您的指导 001ddb04 68b92a42 KERNELBASE!RaiseException+0x58 001ddba8 68c655ef clr!RaiseTheExceptionInternalOnly+0x276 001ddbd8 68c6de52 clr!UnwindAndContinueRethrowHelperAfterCatc

下面是托管调用堆栈的一部分,在这里我可以看到在.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++中没有符号,需要对WEBBG的不同工具扩展。 首先,用.exr-1检查它是否是.NET异常。除少数例外情况外,代码应为0xE0434F4D.COM(ASCII字符)

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

如果需要,可能会有更多详细信息。

0x16c5185a是内存中的一个地址,JIT编译器已在其中编译.NET代码。由于编译的时间不长,C++中没有符号,需要对WEBBG的不同工具扩展。 首先,用.exr-1检查它是否是.NET异常。除少数例外情况外,代码应为0xE0434F4D.COM(ASCII字符)

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


如果您愿意,可能会有更多详细信息。

谢谢您提供的详细信息。看起来这不是一个.NET异常-而是一个表示状态\致命\用户\回调\异常的异常代码。谢谢您提供的详细信息。看起来这不是.NET异常-而是表示状态\致命\用户\回调\异常的异常代码。