我是C#的新手。
我正在编写一个使用来自第三方的com对象的软件。
在visual studio中运行正常,当我尝试另一台机器(我将所有源文件复制到其中)时,应用程序在启动时崩溃并出现“问题事件名称:CLR20r3”。
搜索后我发现了windbg,我试图调试并得出以下结果;
最后你可以看到,System.Runtime.InteropServices.COMException。 我搜索了错误代码,但无法得出任何结果。 任何人都可以帮我解决问题所在或指导我如何使用windbg进入这个问题的细节?
ModLoad: 76d70000 76df3000 C:\Windows\system32\CLBCatQ.DLL
ModLoad: 76c10000 76c9f000 C:\Windows\system32\OLEAUT32.dll
(724.638): C++ EH exception - code e06d7363 (first chance)
(724.638): CLR exception - code e0434352 (first chance)
ModLoad: 74b30000 74b39000 C:\Windows\system32\VERSION.dll
ModLoad: 5e180000 5e22a000 C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll
(724.638): CLR exception - code e0434352 (!!! second chance !!!)
eax=0017ee5c ebx=00000005 ecx=00000005 edx=00000000 esi=0017ef08 edi=00317b00
eip=758eb760 esp=0017ee5c ebp=0017eeac iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206
KERNELBASE!RaiseException+0x58:
758eb760 c9 leave
0:000> .loadby sos clr
0:000> !CLRStack
OS Thread Id: 0x638 (0)
Child SP IP Call Site
0017efd0 758eb760 [HelperMethodFrame: 0017efd0]
0017f020 002d00fc checkAtmModules.Form1..ctor()*** WARNING: Unable to verify checksum for checkAtmModules.exe
[C:\Users\SD\Documents\Visual Studio 2010\Projects\checkAtmModules\checkAtmModules\Form1.cs @ 20]
0017f030 002d00a6 checkAtmModules.Program.Main() [C:\Users\SD\Documents\Visual Studio 2010\Projects\checkAtmModules\checkAtmModules\Program.cs @ 18]
0017f268 5d3e21db [GCFrame: 0017f268]
0:000> !threads
ThreadCount: 2
UnstartedThread: 0
BackgroundThread: 1
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive GC Alloc Lock
ID OSID ThreadOBJ State GC Context Domain Count APT Exception
0 1 638 00317b00 6020 Enabled 01eb7ef0:01eb7fe8 003112a0 0 STA System.Runtime.InteropServices.COMException (01e9d454)
2 2 13d4 00351750 b220 Enabled 00000000:00000000 003112a0 0 MTA (Finalizer)
答案 0 :(得分:0)
在深入研究WinDBG之前,请尝试使用DebugDiag(http://debugdiag.com)创建崩溃报告,它将以更友好的形式为您提供转储中的信息。
在WinDBG中,您可以尝试!PrintException
获取有关托管异常的更多信息,或者尝试kb
命令查看非托管堆栈。在WinDbg的MEX调试扩展中,您可以找到!ClrStack2
命令。在SOSEX扩展中,有一个!mk
命令可显示托管和非托管堆栈帧。
但是很可能您的(3-d参与者)COM安装不正确。我会使用Fuslogvw.exe和/或procmon.exe来监视应用程序在异常发生之前的操作,或者只是使用适当的安装程序将COM安装到新计算机上。