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

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

偶尔(甚至在调试器中)我看到一个NullReferenceException ,它不携带堆栈跟踪信息。

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

一些背景:

我在WinMM.dll中调用/调用函数,这涉及在调用waveOutOpen时注册回调

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

事实certificate这很难稳定,特别是在我调用waveOutClose ,并立即再次调用waveOutOpen (通常是为了改变输出格式)。

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

现在certificate重现问题是难以捉摸的,尽管我可以为一直看到这个问题的用户提供构建。 我可能会尝试加快导致问题的操作,以便在调试器中重现问题更加确定。

关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging )或任何Debug -> Exceptions...设置。 说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的。

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

你可以在调试器中做的最有用的事情是指示它打破第一次机会exception(Debug – > Exceptions):

VS Exceptions窗口

这将导致在抛出NullReferenceException的确切位置进入调试器,这几乎是您在调试时所希望的最佳状态。