转储分析:尽管所有符号都可用

时间:2015-11-17 11:13:22

标签: c# c++ windbg stack-trace mixed-mode

我对我正在进行的最新转储分析有疑问。在我使用命令时的几个转储文件中:

!analyze -v  

我获得有关异常堆栈的信息。这是一个AccessViolationException。堆栈是这样的:

00000000 00000000 unknown.dll!MyComLib.MyCtl.set_ShowInfo+0x1
0028dc5c 00000000 unknown.dll!AxMyComLib.AxCtl.set_ShowInfo+0x1a
0028dc68 00000000 unknown.dll!Company.Client.Utility.set_Options+0x35
0028dc78 00000000 unknown.dll!Company.Client.Utility.SetAvailable+0x1a
0028dc84 00000000 unknown.dll!Company.Client.System.client_Available+0x1df

它从.NET调用COM ActiveX组件。两者都是由我们开发的。而这个短的callstack贯穿3个dll。 .NET-> Wrapper-> COM( - >错误)

我知道模块(它不叫未知;)) 我有所有符号,它们已正确设置和加载。

如果我自然地使用u unknown.dll!MyComLib.MyCtl.set_ShowInfo+0x1则不起作用。但即使我用正确的模块名称替换未知,它也不起作用。

我想知道的是抛出异常的正确源代码行(+ 0x1)。

我的问题:
为什么它显示为未知?
如何找出出现问题的代码行?

我之前没有遇到过"未知"我分析了转储中的模块条目。

更新

更多信息: 线程0上的异常相关帧结果为~0kb1000:

ChildEBP RetAddr  Args to Child              
0028ea28 72ac90f7 e0434352 00000001 00000005 KERNELBASE!RaiseException+0x58
0028eacc 72c00b0c 00000000 73dc63b0 0028eaf0 clr!RaiseTheExceptionInternalOnly+0x276
0028eae4 72c00d3d 00000004 0028ee98 72ac957e clr!RaiseTheException+0x86
0028eb0c 72c00d6d 00000004 004e4790 00000000 clr!RaiseTheExceptionInternalOnly+0x30a
0028eb40 72d03512 00184270 004e4790 00000000 clr!RealCOMPlusThrow+0x2f
0028eb98 72d03a75 0028eda8 00184270 00184270 clr!ThrowInvokeMethodException+0xac
0028eea4 71c03781 00000000 027d25d4 71c0b790 clr!RuntimeMethodHandle::InvokeMethod+0xa64
0028eec8 71c38f9d 00000000 00000000 027d24a8 mscorlib_ni+0x2d3781
0028ef18 729e2952 004e4790 0028ef78 72a0318f mscorlib_ni+0x308f9d
0028ef24 72a0318f 0028efc4 0028ef68 72ac957e clr!CallDescrWorkerInternal+0x34
0028ef78 72a039d5 0028f0c0 00000001 00000000 clr!CallDescrWorkerWithHandler+0x6b
0028eff8 72aaef24 0028f0f4 11ce1352 001837d8 clr!MethodDescCallSite::CallTargetWorker+0x152
0028f124 72aaf048 00000000 00000001 11ce134e clr!RunMain+0x1aa
0028f398 72b0a484 00000000 11ce11de 013c0000 clr!Assembly::ExecuteMainMethod+0x124
0028f89c 72b0a527 11ce1a8e 00000000 00000000 clr!SystemDomain::ExecuteMainMethod+0x614
0028f8f8 72b0a63a 11ce1b4e 00000000 00000000 clr!ExecuteEXE+0x4c
0028f938 72b0c3c2 11ce1b02 00000000 00000000 clr!_CorExeMainInternal+0xdc
0028f974 7308f5a3 11cee72d 00000000 76371222 clr!_CorExeMain+0x4d
0028f9ac 73107efd 0028f9c4 73107f16 00000000 mscoreei!_CorExeMain+0x10a
0028f9c4 73104de3 00000000 7637337a fffde000 mscoree!ShellShim__CorExeMain+0x7d
0028f9cc 7637337a fffde000 0028fa18 77809882 mscoree!_CorExeMain_Exported+0x8
0028f9d8 77809882 fffde000 64decd1b 00000000 kernel32!BaseThreadInitThunk+0xe
0028fa18 77809855 73104ddb fffde000 00000000 ntdll!__RtlUserThreadStart+0x70
0028fa30 00000000 73104ddb fffde000 00000000 ntdll!_RtlUserThreadStart+0x1b

~*e!clrstack在线程上没有任何与异常相关的信息。 !dumpstack也没有。

!threads显示:

       ID OSID ThreadOBJ    State GC Mode     GC Alloc Context  Domain   Count Apt Exception
   0    1 21e8 004e4790     26020 Preemptive  73DF4F30:00000000 004dd3a0 0     STA System.Reflection.TargetInvocationException 73dc63b0

当我!pe直到我得到内部异常时,它是问题开头的AccessViolationException堆栈。

更新2 ~0e !clrstack显示:

0028eb24 74f6c42d [GCFrame: 0028eb24] 
0028eb5c 74f6c42d [GCFrame: 0028eb5c] 
0028ebe0 74f6c42d [HelperMethodFrame_PROTECTOBJ: 0028ebe0] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean)
0028eeb4 71c03781 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[])
0028eed8 71c38f9d System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
0028ef18 0033005f Program.Main() [d:\prg\Program.cs @ 20]
0028f0a4 729e2952 [GCFrame: 0028f0a4] 

例外情况是( - sic!:()在测试电脑上重现相对较好。不幸的是,在开发机器上(连接或不连接调试器)。目前它已经消失了。我有大约6个转储都显示了相同的异常和几乎相同的堆栈跟踪。

更新3
!teb显示有关线程0的以下信息:

TEB at fffdd000
    ExceptionList:        0028eabc
    StackBase:            00290000
    StackLimit:           00283000
    SubSystemTib:         00000000
    FiberData:            00001e00
    ArbitraryUserPointer: 00000000
    Self:                 fffdd000
    EnvironmentPointer:   00000000
    ClientId:             000016e8 . 000021e8
    RpcHandle:            00000000
    Tls Storage:          0ca60888
    PEB Address:          fffde000
    LastErrorValue:       6
    LastStatusValue:      c0000034
    Count Owned Locks:    0
    HardErrorMode:        0

0 个答案:

没有答案