C# 如何诊断;0x处的指令。。。。。。。。。0x00000000处的引用内存;

C# 如何诊断;0x处的指令。。。。。。。。。0x00000000处的引用内存;,c#,.net,memory,runtime-error,C#,.net,Memory,Runtime Error,我负责一个已知会抛出此错误的应用程序 0x09537333处的指令引用了0x00000000处的内存。无法读取内存。 不幸的是,我自己无法复制它 我的问题是,我如何诊断/调试它?我有出错指令的内存位置,但我可以追溯到代码中的一行吗?i、 e.0x09537333指的是相对于我的应用程序的位置还是在操作系统(嵌入式Windows 7)中 是否有其他方法获取有关此错误的进一步信息?在我的代码中是否有任何已知的常见原因需要注意?我已经解决了这个问题-以下是一些信息,以防其他人有相同的问题 进行了更多的

我负责一个已知会抛出此错误的应用程序

0x09537333处的指令引用了0x00000000处的内存。无法读取内存。

不幸的是,我自己无法复制它

我的问题是,我如何诊断/调试它?我有出错指令的内存位置,但我可以追溯到代码中的一行吗?i、 e.
0x09537333
指的是相对于我的应用程序的位置还是在操作系统(嵌入式Windows 7)中


是否有其他方法获取有关此错误的进一步信息?在我的代码中是否有任何已知的常见原因需要注意?

我已经解决了这个问题-以下是一些信息,以防其他人有相同的问题

进行了更多的研究,发现此访问冲突错误可能是由调用非托管函数/代码(例如,用C++编写的dll)中的错误引起的
试试看。。。catch
通常不会捕获此错误,但如果将此错误添加到app.config文件中,则会捕获此错误:

<runtime>
   <legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>

…在按钮处理之前。

每当0x00000000是无法读取的地址时,您拥有的是空指针解引用。

您可以通过以下方法解决此问题:

  • 卸载有问题的软件或

  • 更新驱动程序或

  • 按照说明操作:
    右键单击“我的电脑”图标,然后前往“高级” 选项卡,然后单击可在“性能”下找到的设置

    然后再次转到“高级”选项卡,并单击下面的“更改”按钮 虚拟内存。完成这些更改后,您可以重新启动计算机 如果它消失了,看看问题所在


  • 您将无法从中找到错误原因-您需要在exe中包含pdb文件,以便在发生崩溃时获得堆栈跟踪。您的应用程序是否生成了小型转储文件?如果是这样的话,您可以将其加载到WinDbg并计算出来,但这是一个相当复杂的操作。
    0x00000000
    为空:位于
    0x09537333
    的代码访问空对象或其他内容;通常起始地址是
    0x00400000
    (选中此项,Windows很可能会使用另一个),因此RVA(相对虚拟地址)是
    0x09137333
    (前提是起始地址是
    0040:0000
    )然后使用pdb或其他调试信息将RVA映射到源代码行我说对代码运行一个静态分析器,并注意所有显示“可能出现空解引用”的地方。您在某个地方有一个bug。@DmitryBychenko-那么这与“对象引用未设置为实例…”不同吗?
    if (this.IsDisposed)
    {
        return;
    }