在我的 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:尝试读取或写入受保护的内存
事实证明,我的应用程序在某个地方通过本机方法访问已处理或损坏的内存。我现在的问题是如何使用我使用任务管理器制作的故障转储找到该位置。是否有其他策略可以找到原因?