/ / C # se detiene en la línea de error dentro de try catch [duplicar] - c #, try-catch, puntos de interrupción

C # parada en la línea de error dentro de try catch [duplicate] - c #, try-catch, breakpoints

Si ejecuto el siguiente código que llama a Test1 (),VS2012 se romperá muy bien en esa línea y me mostrará exactamente lo que está sucediendo. Si comento Test1 y pongo Test2, entonces la captura de prueba no se detiene en la línea, solo la registra en la consola.

¿Cómo puedo hacer que VS2012 se detenga en la línea de error, incluso cuando está rodeada por una declaración try catch?

private void Button_Click(object sender, RoutedEventArgs e)
{
//Test1(); // No try catch - stops on error line dividing by zero.
Test2(); // Try catch - Just writes out to console.
}

private void MakeError()
{
int i = -1;
i += 1;
int j = 1 / i;
Console.WriteLine(j.ToString());
}

void Test1()
{
Console.WriteLine("MakeError in Test1");

MakeError();
}

void Test2()
{
Console.WriteLine("MakeError in Test2");
try
{
MakeError();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

Respuestas

4 para la respuesta № 1

Si bien las otras respuestas son correctas, este es el comportamiento intencional de forma predeterminada, puede indicarle a Visual Studio que le avise de esas excepciones si lo desea.

Cómo romper cuando se lanza una excepció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.


1 para la respuesta № 2

Lo que quieres es Visual Studio interrumpir la ejecución cuando se lanza una excepció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 (su caso), Excepciones de Common Language Runtime.

Referencia de MSDN.


0 para la respuesta № 3

Visual Studio solo intervendrá cuando haya una excepción no controlada, en este caso una división por 0. El try...catch manejó la excepción. Como no queda ninguna excepción sin controlar, Visual Studio no saltará.


0 para la respuesta № 4

Las declaraciones try y catch están pensadas para que el flujo de ejecución aún pueda ocurrir, incluso cuando se produce una excepción. El depurador solo se detiene cuando no se maneja la excepción, que el try catch hace.

Esto es intencional