10

我有一个 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);

事实证明,这很难稳定下来,尤其是在我调用waveOutClose,然后立即waveOutOpen再次调用(通常是为了更改输出格式)的时候。

我怀疑这个问题可能与我在上面描述的电话有关(尽管知识如此之少,我可能完全偏离目标)。

重现该问题目前被证明是难以捉摸的,尽管我可以为相当一致地看到此问题的用户提供构建。我可能会尝试将导致问题的操作加速到可以确定地在调试器中重现问题的程度。

关于调试器,我没有修改任何设置(包括Enable unmanaged code debugging)或任何Debug -> Exceptions...设置。老实说,我对这里提供的东西一无所知,所以欢迎任何提示。

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

4

1 回答 1

11

您可以在调试器中做的最有用的事情是指示它在第一次出现异常时中断(调试 -> 异常):

VS 异常窗口

这将导致在抛出 a 的确切点中断调试器NullReferenceException,这几乎是您在调试时所能期望的最好的。

于 2011-04-11T11:46:38.727 回答