NullReferenceException, нет трассировки стека... с чего начать?


У меня есть приложение WPF audio.

Иногда (и даже в отладчике) я вижу 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);

Это оказалось трудно получить стабильным, особенно в точке, где я вызываю waveOutClose, и немедленно вызываю waveOutOpen снова (обычно для изменения формата вывода).

Я подозреваю, что проблема может быть связана с вызовами, которые я описал выше (хотя на таком маленьком knowlege я мог бы быть совершенно нецелевым).

Воспроизведение проблемы в настоящее время оказывается неуловимым, хотя я могу предоставить сборку пользователю, который довольно последовательно видит эту проблему. Я мог бы попытаться ускорить операции, вызывающие проблему, до такой степени, что воспроизведение проблемы в отладчике будет более эффективным. уверенность.

Что касается отладчика, я не возился ни с одной из настроек (включая Enable unmanaged code debugging), ни с одной из настроек Debug -> Exceptions.... Честно говоря, я понятия не имею о том, что здесь предлагается, поэтому любые намеки приветствуются.

Как исключение может не иметь трассировки стека? Вы видели это раньше? Помогите!

1 10

1 ответ:

Самое полезное, что вы можете сделать в отладчике, - это дать ему команду прерваться на первом случайном исключении (Debug - > Exceptions):

Окна против исключения

Это приведет к разрыву в отладчике в точной точке A NullReferenceException, что в значительной степени лучшее, на что вы можете надеяться во время отладки.