デバッグしようとしている古い 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 関数であると思われます