¿Qué es una “excepción a la primera oportunidad”?

Respuestas:

78

Es un concepto de depuración. Básicamente, las excepciones se lanzan primero al depurador y luego al programa real, donde si no se maneja, se envía al depurador por segunda vez, lo que le da la oportunidad de hacer algo con él en su IDE antes y después de la aplicación. Esto parece ser una invención de Microsoft Visual Studio.

Annakata
fuente
21
Es más que un concepto de depuración; C # no proporciona un medio conveniente para observar el manejo de excepciones de dos pasos en tiempo de ejecución, pero vb.net sí. Básicamente, cuando se lanza una excepción, el tiempo de ejecución comienza buscando en la pila de llamadas para averiguar quién, si alguien, va a detectarla. Ese proceso se lleva a cabo antes de cualquier finallybloques iniciales. Una vez que el sistema decidió quién va a detectar una excepción (y determinó que alguien realmente lo hará), el sistema comenzará a desenrollar la pila. Tenga en cuenta que si se lanza una excepción desde un finallybloque ...
supercat
18
... el código que esperaba detectar la excepción original puede terminar no haciéndolo; hay muchos casos de esquina extraños.
supercat
5
Esto sucede cuando ha configurado el depurador para interrumpir todas las excepciones lanzadas (no solo excepciones no controladas), o si "da un paso" en alguna declaración que arroja. Verá el mensaje Se produjo una primera excepción de oportunidad de tipo 'foo' en YourApp.exe . Aún puede continuar (F5) o dar un paso más (F11). Entonces, si hay una catchpara esto, el control va allí. Si no hay ningún catchbloqueo, se obtiene el salto de "segunda oportunidad", esta vez el mensaje es Se produjo una excepción no controlada del tipo 'foo' en YourApp.exe . A partir de aquí, intentar continuar o dar un paso más no tendrá éxito.
Jeppe Stig Nielsen
@supercat: ¿Cómo me entero de los detalles que mencionaste en tus comentarios arriba? ¿Es el resultado de la autoexperimentación? leyendo libros (cuál)? ¡Esa es una visión muy impresionante! Le agradecería si pudiera tomarse un momento para responder esto, por favor ...
anish
2
@NoSaidTheCompiler: He leído sobre el manejo de excepciones en varios blogs; Esperaría que una búsqueda de "filtro de excepción .net" muestre algunos blogs sobre el tema.
supercat
4

Empecé a usar el depurador y encontré esto. En mi investigación, encontré la publicación del blog de MSDN ¿Qué es una excepción de primera oportunidad? eso me lo aclaró.

Lo más importante de la publicación del blog para mí es que se refiere a la notificación al depurador, y no a algo que mi código deba manejar necesariamente, y lo más importante, "Los mensajes de excepción de primera oportunidad no significan que haya un problema en el código."

codificacion
fuente
Incluya un extracto ( no el artículo completo ) de lo que le resultó útil en ese enlace. Había un enlace anterior que solo respondía con el mismo enlace que se eliminó.
Mark Hall
Lo más importante para mí es que se refiere a la notificación al depurador, y no a algo que mi código deba manejar necesariamente, y lo más importante, "Los mensajes de excepción de primera oportunidad no significan que haya un problema en el código".
codingatty
Agregué su comentario a su respuesta, siento que el enlace es lo suficientemente importante como para mantenerlo, estoy tratando de asegurarme de que no se considere una respuesta de enlace como la vez anterior en que se proporcionó.
Mark Hall
0

Cuando se depura una aplicación, el depurador recibe una notificación cada vez que se encuentra una excepción. En este punto, la aplicación se suspende y el depurador decide cómo manejar la excepción. El primer paso a través de este mecanismo se denomina excepción de "primera oportunidad".

Dependiendo de la configuración del depurador, reanudará la aplicación y pasará la excepción o dejará la aplicación suspendida y entrará en modo de depuración. Si la aplicación maneja la excepción, continúa ejecutándose normalmente.

La mayoría de los mensajes de excepción de primera oportunidad no significan que haya un problema en el código. Para aplicaciones / componentes que manejan excepciones con elegancia, los mensajes de excepción de primera oportunidad le permiten al desarrollador saber que se encontró y se manejó una situación excepcional.

David
fuente
0

Desde la perspectiva de un desarrollador, se trata más de una excepción de segunda oportunidad, porque significaría que no se manejó en el código ; por lo tanto, la aplicación se detendría.

La primera oportunidad podría ser muchas de ellas, pero las que más nos preocupan, de nuevo, desde una perspectiva de desarrollo, son la segunda oportunidad, porque conduciría a un bloqueo de la aplicación.

Agustín Garzón
fuente