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

时间:2011-04-11 11:36:55

标签: c# wpf debugging pinvoke winmm

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

异常如何没有堆栈跟踪?你以前见过这个吗?救命啊!

1 个答案:

答案 0 :(得分:10)

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

VS Exceptions window

这将导致调试器在调用NullReferenceException的确切位置中断,这是调试时所希望的最佳效果。

相关问题