2008-09-22 20 views
112

Me gustaría que Visual Studio se rompa cuando ocurre una excepción manejada (es decir, no solo quiero ver un mensaje de "Primera oportunidad", quiero depurar la excepción real).Visual Studio: ¿Cómo romper las excepciones manejadas?

p. Ej. Quiero que el depurador de romper 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 
} 

me encontré con these notas para Visual Studio.NET:

1) En VS.NET ir al menú de depuración >> "Excepciones ..." >> 'Common Language Runtime excepciones' >> 'Sistema' y seleccione 'System.NullReferenceException'

2) En la parte inferior de ese diálogo no es un 'Cuando se produce la excepción:' cuadro de grupo, seleccione "Interrumpir en el depurador "

3) Ejecute su escenario. Cuando se produce la excepción , el depurador parada y le notificará con un cuadro de diálogo que dice algo así como: " ha sido lanzado [Pausa] [Continue] ' ' una excepción de tipo" System.NullReferenceException

Hit [Break]. Esto lo pondrá en la línea de código que está causando el problema .

Pero ellos no se aplican a Visual Studio 2005 (no hay excepciones opción en el menú de depuración ).

¿Alguien sabe donde el encontrar este diálogo de opciones en Visual Studio que el "Cuando se produce la excepción" cuadro de grupo, con la opción de "interrumpir el depurador"?

Actualización: El problema era que mi menú Depurar no tenía un elemento excepciones. Personalicé el menú para agregarlo manualmente.

+5

En VS2015 estaba bajo de Depuración> Windows-> Configuración de excepción – PeterVermont

Respuesta

127

Con una solución abierta, vaya a la depuración - Excepciones (Ctrl +D,E) opción del menú. Desde allí, puede optar por romper las excepciones lanzadas o no controladas por el usuario.

EDIT: ¿Mi instancia está configurada con el "perfil" C# quizás no está allí para otros perfiles?

+6

i simplemente no tienes esa opción. Eso explicaría mi confusión. –

+1

¿Echas de menos el menú de depuración? –

+26

tenía el menú de depuración, pero no las opciones de Excepciones. Personalicé el menú para agregarlo manualmente; la tecla de acceso directo funciona de cualquier manera (Ctrl + Alt + E) –

32

Hay una ventana de 'excepciones' en VS2005 ... tratar Ctrl +Alt +E al depurar y haga clic en la casilla 'Arrojado' para la excepción que desea detener el.

+0

eso es exactamente lo que quiero. ¿Dónde está eso en el menú? Por mi vida no puedo encontrarlo. –

+0

El atajo de teclado puede cambiar según el perfil (desarrollador de C#, desarrollador de C++, etc.) –

+1

Tengo un elemento de menú: Depurar -> Excepciones. Esto es con VS2005 Professional. ¿Estás ejecutando una edición Express? –

5

Compruebe this out en msdn, explica cómo configurar esto.

Esencialmente, estos son los pasos (durante la depuración):

  1. En el menú Depurar, haga clic en Excepciones.

  2. En el cuadro de diálogo Excepciones, seleccione Lanzado para una categoría completa de excepciones, por ejemplo, Excepciones de Common Language Runtime.

    -o-

    Expandir el nodo para una categoría de excepciones, por ejemplo, excepciones Common Language Runtime y seleccione lanzado para una excepción específica dentro de esa categoría.

2

Una técnica que uso es algo como lo siguiente. Definir una variable global que se puede usar para uno o varios bloques catch try dependiendo de lo que está tratando de depurar y utilizar la siguiente estructura:

if(!GlobalTestingBool) 
{ 
    try 
    { 
     SomeErrorProneMethod(); 
    } 
    catch (...) 
    { 
     // ... Error handling ... 
    } 
} 
else 
{ 
    SomeErrorProneMethod(); 
} 

Encuentro 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 con el IDE.

+2

Esta es una técnica útil: convierte la excepción manejada en una excepción no controlada, por lo que el depurador se detiene automáticamente. No estoy seguro de por qué fue downvoted, a menos que sea que no hay una buena manera de configurar su GlobalTestingBool. Otra opción, posiblemente mejor, es usar Debugger.IsAttached. –

+0

Tendría que agregar esto alrededor de cada try/catch y recompilar su código. No es muy útil si ya estás en el medio de depurar algo. – Max

0

La documentación en línea parece un poco confusa, así que acabo de realizar una pequeña prueba. Si elige interrumpir el lanzamiento desde el cuadro de diálogo Excepciones, la ejecución del programa se romperá en cualquier excepción, manejada o no. Si desea romper con las excepciones manejadas solo, parece que su único recurso es revisar su código y poner puntos de corte en todas las excepciones manejadas. Esto parece un poco excesivo, por lo que podría ser mejor agregar una instrucción de depuración siempre que maneje una excepción. Luego, cuando vea esa salida, puede establecer un punto de interrupción en esa línea del código.

5

Me tomó un tiempo encontrar el nuevo lugar para la configuración de la experiencia, por lo tanto, una nueva respuesta.

Desde Visual Studio 2015 usted controla qué Excepciones detener en la Ventana de Configuraciones de Excepción (Depurar-> Windows-> Configuraciones de Excepción).

La forma más sencilla de manejar excepciones personalizadas es seleccionar "todas las excepciones que no estén en esta lista".

1

Desde Visual Studio 2015 y en adelante, tiene que ir al cuadro de diálogo "Configuración de excepción" (Ctrl + Alt + E) y marque las "excepciones Common Language Runtime" (o una específica desea, es decir, ArgumentNullException) para hacer que rompa en manejado excepciones.

Paso 1 Step 1 Paso 2 Step 2

Cuestiones relacionadas