NullReferenceException,没有堆栈跟踪......从哪里开始?

Posted

技术标签:

【中文标题】NullReferenceException,没有堆栈跟踪......从哪里开始?【英文标题】:NullReferenceException, no stack trace... where to start? 【发布时间】:2011-04-11 11:36:54 【问题描述】:

我有一个 WPF 音频应用程序。

有时(甚至在调试器中)我会看到一个NullReferenceException,它不携带任何堆栈跟踪信息。

如何开始调试这样的问题?

一些背景:

我正在 P/调用 WinMM.dll 中的函数,这涉及在调用 waveOutOpen 时注册 callback

    [DllImport("winmm.dll")]
    public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen);

事实证明这很难稳定下来,尤其是在我调用waveOutClose,然后立即再次调用waveOutOpen(通常是为了更改输出格式)。

我怀疑这个问题可能与我上面描述的调用有关(尽管我的知识太少,我可能完全偏离目标)。

重现该问题目前被证明是难以捉摸的,尽管我可以为经常看到此问题的用户提供构建版本。我可能会尝试将导致问题的操作加快到可以确定在调试器中重现问题的程度。

关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging)或任何Debug -> Exceptions... 设置。老实说,我对这里提供的内容一无所知,因此欢迎提供任何提示。

异常怎么可能没有堆栈跟踪?你以前见过这个吗?救命!

【问题讨论】:

是的,这种事情在使用非托管代码时经常发生。它是一个完整的 PITA。就我个人而言,我很想有一份清单,列出要经历的事情。 一份清单会非常方便。有人吗? 【参考方案1】:

您可以在调试器中做的最有用的事情是指示它在第一次机会异常(调试 -> 异常)时中断:

这将导致调试器在NullReferenceException 被抛出的确切点中断,这几乎是您在调试时所能期望的最好结果。

【讨论】:

好。只需在调试器中实现它... ger... grrrrr。 非常感谢!如果您想知道的话,这已在 VS 2015 中移动。调试->Windows->异常设置。它有一个搜索,因此可能最容易使用 NullReference 的搜索框。

以上是关于NullReferenceException,没有堆栈跟踪......从哪里开始?的主要内容,如果未能解决你的问题,请参考以下文章

Resharper 警告空字符串 (System.NullReferenceException)

访问对象数组-运行时 System.NullReferenceException [重复]

如何找到引发“ NullReferenceException:'对象引用未设置为对象实例的方法'?”

iText7 将 HTML 转换为 PDF“System.NullReferenceException”。

加载新场景后Unity 5 NullReferenceException

wpf 出现错误 System.NullReferenceException:“未将对象引用设置到对象的实例“