我有一个正在尝试调试的旧 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
为了找到异常的来源,我在和 to中添加了一个异常处理程序
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 函数