2011-04-11 18 views
10

Tengo una aplicación de audio WPF.NullReferenceException, sin seguimiento de pila ... ¿por dónde empezar?

Ocasionalmente (e incluso en el depurador) veo un NullReferenceException que no contiene información de rastreo de pila.

¿Cómo se puede comenzar a depurar este problema?

Algunos antecedentes:

estoy P/Invocación de funciones en WinMM.dll que implica el registro de un callback al llamar waveOutOpen

[DllImport("winmm.dll")] 
    public static extern MmResult waveOutOpen(out IntPtr phwo, IntPtr uDeviceID, WaveFmt pwfx, WaveCallbk dwCallback, IntPtr dwInstance, int fdwOpen); 

Esto ha demostrado ser difícil de conseguir estable, especialmente en el punto en que llamo waveOutClose, e inmediatamente llame al waveOutOpen nuevamente (generalmente para cambiar el formato de salida).

Sospecho que el problema puede estar relacionado con las llamadas que he descrito anteriormente (aunque con tan poco conocimiento, podría estar completamente fuera de mi objetivo).

La reproducción del problema está demostrando ser evasiva, aunque puedo proporcionarle una compilación a un usuario que constantemente ve este problema. Podría tratar de acelerar las operaciones que están causando el problema hasta el punto de reproducir el problema en el depurador con más certeza.

Con respecto al depurador, no he modificado con ninguna de las configuraciones (incluyendo Enable unmanaged code debugging) ni ninguna de las configuraciones Debug -> Exceptions.... Para ser sincero, no tengo ni idea de lo que se ofrece aquí, así que cualquier pista es bienvenida.

¿Cómo podría una excepción no tener un seguimiento de pila? ¿Habías visto esto antes? ¡Ayuda!

+0

Sí, este tipo de cosas sucede a menudo cuando se trabaja con código no administrado. Y es un PITA total. Personalmente, me encantaría tener una lista de verificación de las cosas por las que pasar. – briantyler

+0

Una lista de verificación sería tremendamente útil. ¿Nadie? – spender

Respuesta

9

Lo más útil que puede hacer en el depurador es instruir a romper en una excepción de primera oportunidad (Depurar -> Excepciones):

VS Exceptions window

Esto provocará una ruptura en el depurador en el punto exacto que se lanza es NullReferenceException, que es prácticamente lo mejor que se puede esperar mientras se depura.

+1

Bueno. Solo tengo que hacer que suceda en el depurador ... ger ... grrrr. – spender

+0

Muchas gracias! Esto se ha movido en VS 2015 en caso de que se lo pregunte .. Depuración-> Windows-> Configuración de excepciones. Allí tiene una búsqueda, por lo que es probablemente el cuadro de búsqueda más fácil de usar para NullReference. –

Cuestiones relacionadas