首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找System.AccessViolationException的病因

寻找System.AccessViolationException的病因
EN

Stack Overflow用户
提问于 2011-02-27 15:16:42
回答 5查看 35.2K关注 0票数 31

我们的应用程序经历了奇怪的致命System.AccessViolationException。当我们将AppDomain.CurrentDomain.UnhandledException事件配置为记录异常时,我们看到了这些。

代码语言:javascript
复制
Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at Bootstrap.Run() in e:\build-dir\src\Bootstrap.cs:line 25

异常本身似乎不包含“试图读取或写入受保护内存”的信息,这通常表明其他内存已损坏。

  • 我们现在可以采取哪些步骤来找出问题的原因?
  • 是否有任何方法确定导致崩溃的非法地址或指针值?
  • 我们能找出是什么本地库代码导致了这个问题吗?
  • 是否有更多的调试/跟踪可以启用?

更新

  • 这是否是由于早期非线程安全使用WinForms API造成的?
EN

Stack Overflow用户

发布于 2015-06-04 22:03:09

我也有类似的问题,不像@BartRead,一直如此。对我来说,一些CLI代码在一个简单的windows窗体应用程序中工作得很好,但是当我把它放在一个大型插件生态系统(多线程)中时,需要使用Application.Run或Application.DoEvents来发送所需的消息。如果您能够访问正在运行的代码,最好的选择(对我起作用)是在维护功能的同时注释掉越来越多的代码片段。原来,我没有GC::Alloc的回调/委托,虽然被固定和仍然引用,但在内存中被移动,或者直接被标记为收集。

如果你使用GC的话,一定要自己清理干净!

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5133971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档