【发布时间】:2013-01-05 21:22:55
【问题描述】:
我有一个旧的 Windows.Forms 应用程序正在尝试调试。
有时运行几分钟后会产生 ArithmeticException 或 OverflowException。源代码必须在代码库中的某处,但堆栈跟踪始终指向行 Application.Run(mainForm);
StackTrace 没有用,因为它只显示 Windows.Forms 本地调用:
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei Program.Main() in C:\xy\Program.cs:Zeile 102.
为了找到异常的来源,我添加了一个异常处理程序
System.Windows.Forms.Application.ThreadException 和 System.AppDomain.CurrentDomain.UnhandledException。
我尝试过启用和禁用捕获异常
System.Windows.Forms.Application.SetUnhandledExceptionMode();
永远不会调用 ThreadException 事件处理程序。 UnhandledException 事件处理程序只报告我在 Visual Studio 中看到的相同异常。
在 Visual Studio 中,我启用了在引发异常时中断执行: 这没有任何效果。
我该怎么做才能找到有问题的代码行?
编辑:完整的异常细节:
如果我在没有附加任何调试器的情况下启动进程,并在附加调试器之前等待它崩溃,我会收到以下异常:
Unbehandelte Ausnahme bei 0x0c9f9e1b in program.exe: 0xC0000090: Floating-point invalid operation.
调试然后导致这块反汇编
0C9F9E12 add esi,10h
0C9F9E15 push 0CA1FD48h
0C9F9E1A push eax
0C9F9E1B fmul qword ptr ds:[0CA202E0h]
0C9F9E21 fstp dword ptr [esp+18h]
我无法解析,但我怀疑这只是 DispatchMessageW 函数
【问题讨论】:
-
您能否一次单步执行代码以确定发生这种情况的位置?您也可以尝试在整个代码的位置使用
Debug类添加断言,以尝试缩小异常可能出现的位置。 -
我目前正在尝试单步执行代码,但问题是它是一个使用多个线程的大型代码库,并且仅在一段时间后才会发生异常。
-
你确定异常没有信息吗?看
InnerException。 -
抱歉,我忘记添加该信息了。 InnerException 为空,我将发布完整的异常
-
您是否修改了 VS 设置以进行调试?取消选中“Unwind the callstack...”(“Aufrufliste für unbehandelte Ausnahmen entladen”——多么具有误导性的翻译)。
标签: c# winforms debugging visual-studio-2008 exception