访问冲突异常通常不会来自托管代码,这意味着您的操作系统认为该进程已经做了一些不好的事情(尝试访问/更改内存不应该),应该终止。
当你用windbg捕获异常(然后进行转储)时已经太晚了。
一些选项:
- 使用debugdiag进行崩溃转储(在抛出异常并且流程开始解构之前,这将在正确的位置获得转储)Capturing crash dumps,Download DebugDiag 1.2
- 在进程运行一段时间之后查看任务管理器并且预计会失败,(使用选择列)检查GDI,句柄,线程,用户对象 - 这些都是跟踪资源并且限制了操作系统支持,如果其中一个很高(成千上万),这可能是一个问题。
- 查看您的代码,检查使用非托管对象的任何点并验证它们是否正确处理。 (使用COMobjects是访问非托管资源的最常用方法,这些可能会导致访问冲突,因为它们直接使用OS mem分配)