Me gustaría que Visual Studio se interrumpiera cuando ocurra una excepción manejada (es decir, no solo quiero ver un mensaje de "Primera oportunidad", quiero depurar la excepción real).
Por ejemplo, quiero que el depurador se rompa en la excepción:
try
{
System.IO.File.Delete(someFilename);
}
catch (Exception)
{
//we really don't care at runtime if the file couldn't be deleted
}
Encontré estas notas para Visual Studio.NET:
1) En VS.NET, vaya al Menú de depuración >> "Excepciones ..." >> "Excepciones de Common Language Runtime" >> "Sistema" y seleccione "System.NullReferenceException"
2) En la parte inferior de ese cuadro de diálogo hay un cuadro de grupo "Cuando se lanza la excepción:", seleccione "Irrumpir en el depurador"
3) Ejecute su escenario. Cuando se lanza la excepción, el depurador se detendrá y le notificará con un cuadro de diálogo que dice algo como: "Se ha lanzado una excepción de tipo" System.NullReferenceException ". [Interrupción] [Continuar]"
Golpear [Romper]. Esto lo pondrá en la línea de código que está causando el problema.
Pero no se aplican a Visual Studio 2005 (no hay una opción de Excepciones en el menú Depurar ).
¿Alguien sabe dónde encuentra este cuadro de diálogo de opciones en Visual Studio que el cuadro de grupo " Cuando se lanza la excepción ", con la opción de " Irrumpir en el depurador "?
Actualización: El problema era que mi menú Depurar no tenía un elemento de Excepciones . Personalicé el menú para agregarlo manualmente.
fuente
Respuestas:
Con una solución abierta, vaya a la opción de menú Depuración - Excepciones ( Ctrl+ D, E). Desde allí, puede optar por interrumpir las excepciones lanzadas o no manejadas por el usuario .
EDITAR: Mi instancia está configurada con el "perfil" de C #, ¿tal vez no está allí para otros perfiles?
fuente
Common Language Runtime Exceptions
><All Common Language Runtime Exceptions not in this list>
en Visual Studio 2017 y todos mis sueños más salvajes se hicieron realidad.Hay una ventana de 'excepciones' en VS2005 ... intente Ctrl+ Alt+ Eal depurar y haga clic en la casilla de verificación 'Lanzar' para la excepción en la que desea detenerse.
fuente
Me tomó un tiempo encontrar el nuevo lugar para la configuración de expection, por lo tanto, una nueva respuesta.
Desde Visual Studio 2015 usted controla qué Excepciones detenerse en la Ventana de Configuración de Excepción (Depuración-> Windows-> Configuración de Excepción). El atajo sigue siendo Ctrl- Alt- E.
La forma más sencilla de manejar excepciones personalizadas es seleccionar "todas las excepciones que no están en esta lista".
Aquí hay una captura de pantalla de la versión en inglés:
Aquí hay una captura de pantalla de la versión alemana:
fuente
Desde Visual Studio 2015 y en adelante, debe ir al cuadro de diálogo "Configuración de excepciones" ( Ctrl+ Alt+ E) y marcar las "Excepciones de Common Language Runtime" (o una específica que desee, es decir
ArgumentNullException
) para que se rompa en las excepciones manejadas .Paso 1 Paso 2
fuente
Compruebe Administrar excepciones con la página del depurador , explica cómo configurar esto.
Básicamente, estos son los pasos (durante la depuración):
En el menú Depurar, haga clic en Excepciones.
En el cuadro de diálogo Excepciones, seleccione Lanzado para una categoría completa de excepciones, por ejemplo, Excepciones de Common Language Runtime.
-o-
Expanda el nodo para una categoría de excepciones, por ejemplo, Common Language Runtime Exceptions, y seleccione Lanzado para una excepción específica dentro de esa categoría.
fuente
Una técnica que uso es algo como lo siguiente. Defina una variable global que pueda usar para uno o varios bloques catch de prueba según lo que esté tratando de depurar y use la siguiente estructura:
Creo que esto me da un poco más de flexibilidad en términos de pruebas porque todavía hay algunas excepciones que no quiero que rompa el IDE.
fuente
catch(){/*handle or not*/ throw; } // throw without any exception specified will rethrow original exception with original callstack etc
La documentación en línea parece un poco confusa, así que acabo de realizar una pequeña prueba. Si elige interrumpir en Lanzar desde el cuadro de diálogo Excepciones, la ejecución del programa se interrumpirá en cualquier excepción, manejada o no manejada. Si solo quiere romper las excepciones manejadas, parece que su único recurso es revisar su código y poner puntos de interrupción en todas sus excepciones manejadas. Esto parece un poco excesivo, por lo que podría ser mejor agregar una declaración de depuración cada vez que maneje una excepción. Luego, cuando vea esa salida, puede establecer un punto de interrupción en esa línea en el código.
fuente