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

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

Иногда (и даже в отладчике) я вижу NullReferenceException, который не содержит информации о трассировке стека.

Как можно начать отладку такой проблемы?

Немного фона:

Я P/Вызов функций в 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.... Честно говоря, я совершенно не знаю, что здесь предлагается, поэтому любые подсказки приветствуются.

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


person spender    schedule 11.04.2011    source источник
comment
Да, такое часто случается при работе с неуправляемым кодом. И это полная ПИТА. Лично я хотел бы иметь контрольный список вещей, которые нужно пройти.   -  person satnhak    schedule 11.04.2011
comment
Контрольный список был бы очень кстати. Кто-нибудь?   -  person spender    schedule 11.04.2011


Ответы (1)


Самое полезное, что вы можете сделать в отладчике, это дать ему указание прерывать работу при возникновении исключения первого шанса (Отладка -> Исключения):

Окно исключений VS

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

person Jon    schedule 11.04.2011
comment
Хорошо. Просто нужно сделать это в отладчике... гер... грррр. - person spender; 11.04.2011
comment
Большое спасибо! Это было перенесено в VS 2015, если вам интересно. Отладка-> Windows-> Настройка исключений. Там есть поиск, поэтому, вероятно, проще всего использовать окно поиска для NullReference. - person Andreas Reiff; 26.08.2015