2010-01-07 10 views
19

Tengo un proyecto que se ejecuta perfecto en Windows XP.Una excepción de primera oportunidad

Ahora he intentado ejecutarlo bajo Windows 7 y he obtenido muchas excepciones en la ventana Inmediato.

A first chance exception of type 'System.ArgumentNullException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.IO.FileNotFoundException' occurred in LP_Wizard.exe 
A first chance exception of type 'System.ArgumentException' occurred in LP_Wizard.exe 
A first chance exception of type 'System.NullReferenceException' occurred in LP_Wizard.exe 
A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.ArgumentNullException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.IO.FileNotFoundException' occurred in LP_Wizard.exe 
A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.ArgumentNullException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.IO.FileNotFoundException' occurred in LP_Wizard.exe 
A first chance exception of type 'System.ArgumentNullException' occurred in Microsoft.VisualBasic.dll 
A first chance exception of type 'System.IO.FileNotFoundException' occurred in LP_Wizard.exe 

Alguna idea de lo malo que Microsoft.VisualBasic.dll en Windows 7 y cómo puedo corregir este problema?

Muchas gracias por ayuda.

Respuesta

43

Lo que ocurre es que el depurador puede "ver" excepciones en cuanto se levantan (de ahí la "primera oportunidad") antes de cualquier bloque catch es golpeado. Cualquier excepción que no sea manejada por un bloque catch se considera una excepción de "segunda oportunidad" y se romperá normalmente.

Si estas excepciones no detienen el funcionamiento de su aplicación porque no están controladas, entonces probablemente esté bien. La mayoría de las veces, la excepción es manejada por código y esto no es un problema. La salida es simplemente Visual Studio que le permite saber que se generaron excepciones.

Consulte la pregunta "Avoiding first chance exception messages when the exception is safely handled" para algunos métodos para reducir esto si hay demasiados para ignorar.

+6

+1. Además, si está desencadenando muchas excepciones y atrapándolas e ignorándolas, podría valer la pena intentar reescribir el código para evitarlo, ya que funcionará mucho mejor. por ejemplo, use un if (cosa! = nulo) antes de la llamada en lugar de un catch (NullPointerException) después. – Paolo

+1

Definitivamente, Paolo. Las excepciones deben ser excepcionales. Por supuesto, si las excepciones están ocurriendo en Microsoft.VisualBasic.dll, probablemente no hay demasiadas cosas que puede hacer, desafortunadamente. :) –

+0

Incluso si la excepción está ocurriendo en Microsoft.VisualBasic.dll, lo más probable es que esté causada por un error en su propio código, en lugar de un error en el código de Microsoft. – MarkJ

1

¿Estás en el depurador? ¿Estas excepciones está manejando su programa? Si es así, debe encontrar una configuración que le indique a VB que lo suprima y le advierta de las excepciones manejadas. Quizás esto se configuró cuando se instaló en XP pero no cuando se instaló en W7. Ver si esto ayuda:

http://www.helixoft.com/blog/archives/24

55

Si desea identificar dónde se producen las excepciones, puede seleccionar el elemento de menú Depurar-> Excepciones y, en el cuadro de diálogo que aparece, marcar la primera casilla de verificación para "Excepciones de Common Language Runtime". Esto hará que el depurador se interrumpa tan pronto como se produzca una excepción en lugar de solo interrumpir las excepciones no controladas.

Esta es también una razón por la que generalmente es una mala idea capturar excepciones genéricas a menos que esté registrando claramente la información capturada.

+1

+1 ¡Nunca antes lo había notado! –

+0

Gracias una tonelada. Estaba generando cientos de archivos no encontrados, y esto me permitió rastrear y verificar dónde estaba ocurriendo. – mklauber

+1

+1 y la captura de excepciones genéricas en lugar de usar control de flujo ralentiza su aplicación mucho – nima

Cuestiones relacionadas