访问冲突异常发生时如何找到wpf应用程序崩溃位置?

时间:2014-01-13 21:10:16

标签: c# wpf visual-studio-2012 .net-4.0

我的申请有时会崩溃。但是视觉工作室总是只输出:

  

XXAplication return -1073741819(0xc0000005)'访问违规'。

所以我甚至不知道哪个部分崩溃,或哪个行崩溃。 应用程序非常大。那么有什么方法可以知道或了解碰撞位置或任何方式可以调试吗?

  

更新

     

对不起家伙,启用:“公共语言运行时异常”不是任何   救命。仍然只输出(0xc0000005)'访问违规'。

3 个答案:

答案 0 :(得分:1)

一般情况下,这很困难,堆栈跟踪可能无法引导您到任何地方,甚至可能误导您。即使在像C ++这样的原生平台上也很难,但至少他们有工具来帮助诊断这些问题。

访问冲突错误意味着内存损坏。 .net是一个内存管理平台,所以在技术上它是不可能的。

但是当您或框架或第三方库使用不安全的代码或调用非托管API时,它是可能的。当其中一个破坏内存时,可能不会立即抛出错误。错误可能出现在任何其他地方。

您可以查看正在使用的组件并尝试将其升级到最新版本,或尝试暂时禁用/替换它们。

根据我的经验,例如System.DirectoryServices程序集在旧的Windows服务器上导致了很多错误。我们升级到更新的Windows和更新的.net,从那时起就没有看到过这个错误。

答案 1 :(得分:0)

听起来你正在从VS运行应用程序,因此在IDE中启用第一次机会异常可能是找出错误实际抛出位置的最简单方法。如果你去Debug |例外...菜单项,这将打开一个对话框,您可以在其中选中“公共语言运行时例外”的“Thrown”复选框。这将导致调试器在抛出异常的地方中断,即使它是由代码处理的。

答案 2 :(得分:0)

就我而言,我有一个obj1数组,我想将其发送到服务器。在我的对象内部,有一个List的{​​{1}}。在obj2内部,我引用了obj2。您可能猜到了,我的对象内部有一个溢出异常,系统无法将其转换为对象,并且发生了obj1。 尝试在新的更新代码中找到类似的内容。