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



我的应用程序有时会崩溃。 但Visual Studio总是只输出:

XXAplication return -1073741819 (0xc0000005) 'Access viviation'。

所以我甚至不知道哪个部分是崩溃的,或者哪条线是崩溃的。应用程序非常大。那么有什么方法可以知道或理解崩溃位置,或者有什么方法可以调试它呢?

更新

对不起,伙计们,启用:"公共语言运行时异常"不是任何 帮助。仍然只是输出(0xc0000005)"访问冲突"。

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

访问冲突错误意味着内存损坏。 .NET 是一个内存托管平台,因此从技术上讲这是不可能的。

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

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

例如,根据我的经验,System.DirectoryServices程序集在旧的Windows服务器上导致了很多错误。我们升级到较新的Windows和较新的.net,此后再也没有看到此错误。

听起来

您正在从VS运行该应用程序,因此在IDE中打开首次机会异常可能是找出错误实际引发位置的最简单方法。如果转到"调试 |异常。。。菜单项,这将弹出一个对话框,您可以在其中选中"公共语言运行时异常"的"抛出"复选框。这将导致调试器在引发异常的位置中断,即使它由代码处理也是如此。

就我而言,我有一个obj1数组,我想将其发送到服务器。在我的对象内部,我有一个obj2 List.在obj2里面,我提到了obj1.正如您可能猜到的那样,我的对象中有一个溢出异常,系统无法将其转换为对象,并且Access Violation发生了。尝试在新更新的代码中找到类似的东西。

最新更新