【发布时间】:2011-04-11 11:36:54
【问题描述】:
我有一个 WPF 音频应用程序。
有时(甚至在调试器中)我会看到一个NullReferenceException,它不携带任何堆栈跟踪信息。
如何开始调试这样的问题?
一些背景:
我正在 P/调用 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... 设置。老实说,我对这里提供的内容一无所知,因此欢迎提供任何提示。
异常怎么可能没有堆栈跟踪?你以前见过这个吗?救命!
【问题讨论】:
-
是的,这种事情在使用非托管代码时经常发生。它是一个完整的 PITA。就我个人而言,我很想有一份清单,列出要经历的事情。
-
一份清单会非常方便。有人吗?
标签: c# wpf debugging pinvoke winmm