除了基类数据(如堆栈跟踪)之外,NullReferenceException背后的设计决策是什么,不包含任何运行时特定的信息?是否有Visual Studio的扩展,可以直接告诉你表达式的哪一部分为空?
我有一个WPF音频应用程序.
偶尔(甚至在调试器中)我看到一个NullReferenceException没有堆栈跟踪信息.
如何开始调试这样的问题?
一些背景:
我是P/Invoking函数,WinMM.dll其中涉及在调用时注册回调waveOutOpen
[DllImport("winmm.dll")]
public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen);
Run Code Online (Sandbox Code Playgroud)
事实证明这很难稳定,尤其是在我打电话的时候waveOutClose,并立即waveOutOpen再次调用(通常是改变输出格式).
我怀疑这个问题可能与我上面描述的调用有关(尽管知识很少,我可能完全偏离目标).
重现问题目前证明是难以捉摸的,尽管我可以为一直看到这个问题的用户提供构建.我可能会尝试加快导致问题的操作,以便在调试器中重现问题更加确定.
关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging)或任何Debug -> Exceptions...设置.说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的.
异常怎么可能没有堆栈跟踪?你以前见过这个吗?救命!
例如," System.NullReferenceException未处理",消息"对象引用未设置为对象的实例".
这个例外的含义是什么,如何解决?