2008-10-02 19 views
42

Cuando depuro un programa C# y obtengo una excepción arrojada (lanzada por código O lanzada por el marco), el IDE se detiene y me lleva a la línea correspondiente en mi código .Continuando en el depurador de Visual Studio después de que ocurra una excepción

Todo está bien por ahora.

Luego presiono "F5" para continuar. A partir de este momento, parece que estoy en un ciclo infinito. El IDE siempre me devuelve a la línea de excepción. Tengo que Shift + F5 (detener la depuración/finalizar el programa) para salir de su.

Hablé con algunos compañeros de trabajo aquí y me dijeron que esto les sucede a ellos también en algún momento.

¿Qué está pasando?

+0

El comportamiento del depurador dependerá en gran medida del código que está depurando. ¿Podría editar su pregunta para incluir una muestra de código e indicar qué línea causa el comportamiento descrito? –

Respuesta

16

Esto se debe a que la excepción no se maneja y Visual Studio no puede pasar esa línea sin que se maneje de alguna manera. En pocas palabras, es por diseño.

Una cosa que puede hacer es arrastrar y soltar el punto de ejecución (línea amarilla/flecha) a un punto anterior en su código y modificar los valores en memoria (usando las ventanas de Visual Studio) para que no causen una excepción. Luego comience a recorrer el código nuevamente .

Es mejor idea detener la ejecución y solucionar el problema que causa la excepción, o manejar adecuadamente la excepción si el lanzamiento no es deseado.

Esto puede tener consecuencias no deseadas ya que básicamente está volviendo a ejecutar algún código (no rebobinando la ejecución).

+3

no obtengo la línea amarilla, en cambio muestra la línea verde con una flecha verde donde ocurrió la excepción, y no puedo mover la flecha verde a ninguna parte. ¿Qué hago en ese caso? –

+0

@Anirudh Goel, el mismo problema aquí. – Pedro77

+1

Esto parece extraño ... a veces queremos ver qué sucede cuando se golpea una excepción no manejada – mmcrae

3

Una vez que obtenga una excepción, Visual Studio (o cualquier IDE que pueda estar usando) no le permitirá ir más allá a menos que la excepción se maneje en su código.

Este comportamiento es por diseño.

2

Una excepción no detectada hará que baje su aplicación. En lugar de esto, VS lo mantendrá en la excepción no detectada, tendrá que finalizar o retroceder su aplicación.

4

Cuando el IDE se rompe en la línea ofensiva del código, se detiene justo antes de ejecutar la línea que generó la excepción. Si continúa, simplemente ejecutará esa línea nuevamente y obtendrá la excepción nuevamente.

Si desea pasar el error para ver qué hubiera pasado, si no hubiera ocurrido el error, puede arrastrar la línea resaltada en amarillo (la línea que se ejecutará a continuación) a la siguiente línea de código después del ofender a uno. Por supuesto, dependiendo de lo que la línea ofensiva no pudo hacer, su programa ahora puede estar en un estado que causa otros errores, en cuyo caso usted no se ha ayudado mucho y probablemente debería arreglar su código para que la excepción no lo haga. Ocurre, o se maneja correctamente.

43

Probablemente tenga la opción "Desenrollar la pila de llamadas en las excepciones no controladas" marcada en Visual Studio. Cuando esta opción está activada, Visual Studio se desenrollará justo antes de la excepción, por lo que al tocar F5 se seguirá presionando la misma excepción.

Si desmarca la opción Visual Studio se romperá en la excepción, pero al presionar F5 se pasará esa línea.

Esta opción se encuentra en el menú Herramientas → Opciones Depuración → generales.

Cuestiones relacionadas