如何诊断“0x指令...引用内存为0x00000000”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何诊断“0x指令...引用内存为0x00000000”相关的知识,希望对你有一定的参考价值。
我负责一个已知会抛出此错误的应用程序。
The instruction at 0x09537333 referenced memory at 0x00000000. The memory could not be read.
不幸的是我不能自己复制它。
我的问题是,我该如何进行诊断/调试呢?我有违规指令的内存位置,但我可能追溯到我的代码中的一行吗?即0x09537333
是指相对于我的应用程序的位置还是在OS(Windows 7 Embedded)中?
有没有其他方法可以获得有关此错误的更多信息?在我的代码中我应该注意哪些已知的常见原因?
我已经解决了这个问题 - 这里有一些信息,以防其他人有同样的问题。
做了一些研究,发现这个访问冲突错误可能是由于对非托管函数/代码的调用中的错误引起的(例如用C ++编写的dll) - try... catch
通常不会捕获此错误,但是如果这被添加到app.config文件中:
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
这是一种可能性。
但实际上在我的情况下,错误是由一个线程在一个表单上运行异常长时间引起的。
表格在完成之前已经关闭。在线程结束时,它试图隐藏表单上的按钮。由于表单现在是Disposed,因此抛出了Access Violation错误。
我通过解决导致线程运行这么长时间的问题来解决这个问题,但也补充说“以防万一”
if (this.IsDisposed)
{
return;
}
...在按钮处理之前。
每当0x00000000是无法读取的地址时,您所拥有的是空指针解除引用。
您可以通过以下方式解决此问题
- 卸载有问题的软件或
- 更新驱动程序或
- 按照指示 : 右键单击“我的电脑”图标,然后转到“高级”选项卡,然后单击“性能”下的“设置”。 然后再次转到“高级”选项卡,然后单击“虚拟内存”下的“更改”按钮执行这些更改后,您可以重新启动计算机并查看问题是否消失。
以上是关于如何诊断“0x指令...引用内存为0x00000000”的主要内容,如果未能解决你的问题,请参考以下文章