我有一个WPF音频应用程序。
偶尔(甚至在调试器中)我看到NullReferenceException
没有携带堆栈跟踪信息。
如何开始调试此类问题?
一些背景知识:
我在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...
设置。说实话,我对这里提供的内容毫无头绪,所以欢迎任何提示。
异常如何没有堆栈跟踪?你以前见过这个吗?救命啊!
答案 0 :(得分:10)
你可以在调试器中做的最有用的事情是指示它打破第一次机会异常(Debug - > Exceptions):
这将导致调试器在调用NullReferenceException
的确切位置中断,这是调试时所希望的最佳效果。