私のwinformsアプリケーションでは、ランダムに次の例外が発生します。
Application: My.Shell.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
at System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
at System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
at System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
at System.Windows.Forms.Application.Run(System.Windows.Forms.Form)
at Microsoft.Practices.CompositeUI.WinForms.FormShellApplication`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Start()
at Microsoft.Practices.CompositeUI.CabApplication`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Run()
at My.Shell.ModuleLoader.Main()
スタック トレースは、Windows イベント ビューアーからのものでした。(取り消されていない例外ハンドラーはそれを取得しませんでした。)
SOでこれに関する多くの記事を読みました:
- C# WinForms 例外: タイプ 'System.AccessViolationException' の最初のチャンス例外
- System.AccessViolationException の原因を見つける
- System.Windows.Forms からの AccessViolationException、WPF で WinFormsHost を使用
- コンボからの AccessViolationException: 保護されたメモリを読み書きしようとしました
私のアプリケーションのどこかで、ネイティブ メソッドを介して破棄または破損したメモリにアクセスしていることが判明しました。私の質問は、タスクマネージャーで作成したクラッシュダンプを使用してその場所を見つける方法です。原因を見つけるための他の戦略はありますか?