1

我正在尝试找出应用程序在特定机器上崩溃的原因。

当应用程序崩溃时,它说故障模块是kernel32.dll.

请参阅下面的输出windbg。它似乎在调用MyClass.Start.

如何更详细地确定崩溃的实际原因?

ModLoad: 69840000 69a05000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Web.Services\b66225f7bf51912a34f21181b36f800f\System.Web.Services.ni.dll
ModLoad: 68180000 68cdc000   C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Web\88803928914c8cc4b21ca1ad19f3d40f\System.Web.ni.dll
ModLoad: 6e0c0000 6e0d0000   Microsoft.ReportViewer.ProcessingObjectModel.dll
ModLoad: 10840000 10850000   Microsoft.ReportViewer.ProcessingObjectModel.dll
ModLoad: 6e0c0000 6e0d0000   C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.ProcessingObjectModel\8.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.ProcessingObjectModel.dll
ModLoad: 10890000 109af000   vbc.exe 
ModLoad: 6e500000 6e646000   C:\Windows\SysWOW64\browseui.dll
ModLoad: 6ed70000 6eda0000   C:\Windows\SysWOW64\DUser.dll
ModLoad: 6e010000 6e020000   MyDll.dll
ModLoad: 101e0000 101f0000   MyDll.dll
ModLoad: 6e010000 6e020000   C:\Program Files (x86)\AppName\MyDll.dll
ModLoad: 69690000 69835000   C:\Windows\assembly\NativeImages_v2.0.50727_32\Microsoft.VisualBas#\268869655c671d09c3af0f81165da32e\Microsoft.VisualBasic.ni.dll
03/10/2013 21:49:50: MyClass.Start: started
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (first chance)
(1b48.1b84): CLR exception - code e0434f4d (!!! second chance !!!)
eax=109cf4c0 ebx=e0434f4d ecx=00000001 edx=00000000 esi=109cf548 edi=19033980
eip=7575d8cb esp=109cf4c0 ebp=109cf510 iopl=0         nv up ei pl nz ac pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000216
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Windows\syswow64\kernel32.dll - 
kernel32!RaiseException+0x59:
7575d8cb c9              leave
0:027> g
WARNING: Continuing a non-continuable exception
(1b48.1b84): Break instruction exception - code 80000003 (first chance)
eax=00000001 ebx=00000000 ecx=00000000 edx=109cf4ec esi=00000000 edi=746a4bd4
eip=77ba0004 esp=109cf04c ebp=109cf4f8 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
ntdll!DbgBreakPoint:
77ba0004 cc              int     3
0:027>

这是来自的输出!printexception

Exception object: 0934bc08
Exception type: System.InvalidOperationException
Message: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
InnerException: <none>
StackTrace (generated):
    SP       IP       Function
    10DCF63C 715FE2AF System_Windows_Forms_ni!System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean)+0x85997f
    10DCF6DC 70DA4830 System_Windows_Forms_ni!System.Windows.Forms.Control.BeginInvoke(System.Delegate, System.Object[])+0x50
    10DCF710 10BC8E2D Microsoft_ReportViewer_WinForms!Microsoft.Reporting.WinForms.ReportViewer.OnRenderingComplete(Microsoft.Reporting.WinForms.ProcessThreadResult, Microsoft.Reporting.WinForms.PostRenderArgs)+0x5d
    10DCF72C 10BC8DB9 Microsoft_ReportViewer_WinForms!Microsoft.Reporting.WinForms.ProcessThreadArg.OnComplete(Microsoft.Reporting.WinForms.ProcessThreadResult)+0x11
    10DCF734 10BC4EB3 Microsoft_ReportViewer_WinForms!Microsoft.Reporting.WinForms.ProcessingThread.ProcessThreadMain(System.Object)+0x38b
    10DCF790 739838E2 mscorlib_ni!System.Threading.ThreadHelper.ThreadStart_Context(System.Object)+0x72c8b2
    10DCF79C 7326051F mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)+0x6f
    10DCF7B4 7375D43A mscorlib_ni!System.Threading.ThreadHelper.ThreadStart(System.Object)+0x4a

StackTraceString: <none>
HResult: 80131509
4

2 回答 2

2

Kernel32.dll 是引发 CLR 异常的地方(这是在 CLR 应用程序中的任何异常上引发到外部非托管世界的异常),这就是运行时将其视为问题的原因,但当然它不是。

如果您可以在目标机器上运行 Windbg 并附加到使用此 dll 的进程,这里有一篇相当出色的文章展示了如何中断异常并查看异常的实际堆栈跟踪 + 打印出它的一些详细信息,这应该有助于查明您的托管代码中下降的部分。

于 2013-10-03T15:07:23.897 回答
1

输出显示线程 1b48.1b84 上的托管异常。SOS/PSSCOR的!threads命令也显示每个线程上的异常。

输出还表明您当前处于失败的线程上,因此!printexception(也来自 SOS/PSSCOR)将为您提供该线程上的托管异常。

于 2013-10-03T15:18:06.093 回答