#c# #wpf #debugging #pinvoke #winmm
#c# #wpf #отладка #pinvoke #winmm
Вопрос:
У меня есть аудиоприложение 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...
настройки. Честно говоря, я довольно невежественен в том, что здесь предлагается, поэтому любые подсказки приветствуются.
Как исключение может не иметь трассировки стека? Вы видели это раньше? Помогите!
Комментарии:
1. Да, такого рода вещи происходят слишком часто при работе с неуправляемым кодом. И это полный провал. Лично я хотел бы иметь контрольный список того, что нужно пройти.
2. Контрольный список был бы очень удобен. Кто-нибудь?
Ответ №1:
Самое полезное, что вы можете сделать в отладчике, — это указать ему прерываться при первом случайном исключении (Debug -> Исключения):
Это вызовет сбой в отладчике именно в тот момент, когда будет вызван a NullReferenceException
, что в значительной степени является лучшим, на что вы можете надеяться при отладке.
Комментарии:
1. Хорошо. Просто нужно, чтобы это произошло в отладчике … ger … grrrr.
2. Большое спасибо! Это перенесено в VS 2015 на случай, если вам интересно.. Отладка-> Windows-> Настройка исключения. Там есть поиск, поэтому, вероятно, проще всего использовать окно поиска для NullReference.