未处理和无法捕获的System.AccessViolationException

时间:2011-10-31 13:57:56

标签: c# .net windbg access-violation

1 个答案:

答案 0 :(得分:0)

访问冲突异常通常不会来自托管代码,这意味着您的操作系统认为该进程已经做了一些不好的事情(尝试访问/更改内存不应该),应该终止。 当你用windbg捕获异常(然后进行转储)时已经太晚了。

一些选项:

  • 使用debugdiag进行崩溃转储(在抛出异常并且流程开始解构之前,这将在正确的位置获得转储)Capturing crash dumpsDownload DebugDiag 1.2
  • 在进程运行一段时间之后查看任务管理器并且预计会失败,(使用选择列)检查GDI,句柄,线程,用户对象 - 这些都是跟踪资源并且限制了操作系统支持,如果其中一个很高(成千上万),这可能是一个问题。
  • 查看您的代码,检查使用非托管对象的任何点并验证它们是否正确处理。 (使用COMobjects是访问非托管资源的最常用方法,这些可能会导致访问冲突,因为它们直接使用OS mem分配)