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

spe*_*der 10 c# debugging wpf pinvoke winmm

我有一个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...设置.说实话,我对这里提供的内容毫无头绪,所以任何提示都是受欢迎的.

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

Jon*_*Jon 10

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

VS Exceptions窗口

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

  • 好.只需要在调试器中实现它...... ger ... grrrr. (2认同)