Подтвердить что ты не робот

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

У меня есть аудио-приложение 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.... Честно говоря, я довольно не знаю, что здесь предлагается, поэтому любые намеки приветствуются.

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

4b9b3361

Ответ 1

Самое полезное, что вы можете сделать в отладчике, это дать ему возможность разбить исключение первого шанса (Debug → Exceptions):

VS Exceptions window

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