18

Tengo un pequeño problema. A veces, cuando depuro una aplicación, quiero simular durante la sesión de depuración una excepción lanzada desde un método, pero no hay forma de hacerlo. Ni siquiera puedo arrastrar el cursor (el amarillo que indica la línea actual) a un bloque de excepción. La única forma de activar una excepción durante la ejecución es cambiar la línea de código actual y escribir la excepción que deseo lanzar. Este método no es bueno porque podría olvidar cambiarlo en la próxima ejecución.Cómo lanzar una excepción durante la sesión de depuración en VS2010

Respuesta

14

Desafortunadamente, Visual Studio aún no admite arrojar una excepción desde la ventana Inmediato.

Además, no admite expresiones lambda, tipos anónimos, inicializadores de colecciones, etc. Algo como .NET 2.0 solamente.


También puede utilizar Debug.Assert(false);

16

Usted podría utilizar la compilación condicional:

#if DEBUG 
    throw new Exception("Test"); 
#endif 

EDIT: Con una condición adicional:

#if DEBUG && ENABLETESTEXCEPTION 
    throw new Exception("Test") 
#endif 

Se puede crear una configuración personalizada (similar a la versión/depuración) con lo anterior condicional definido (propiedades del proyecto-> Construir-> Símbolos de compilación condicional).

+0

Esto es mejor que el mío, no pensé en eso – Amedio

+2

Pensé en eso, pero todavía pone líneas innecesarias en el código y es un código de depuración que no necesito la mayoría del tiempo. – Clueless

+0

Puede agregar símbolos personalizados (arriba 'DEBUG' es el símbolo), para controlar que se ejecute con eso y no solo en una ejecución de depuración. –

2

haces esto para probar que está manejando la excepción de código de llamada?

Si es así, es posible que desee analizar algunas pruebas de unidad y utilizar un marco de burla para quitar tihs.

que tienen experiencia con Moq (Mock) http://code.google.com/p/moq/

Hay algunos tutoriales en el sitio de configurar y correr con ella, es bastante fácil una vez que ponerse en marcha.

Primero deberá configurar un proyecto de prueba en su solución, agregar el dll de Moq y luego escribir un método de prueba que configure el Moq de su objeto y le indique que genere una excepción.

Se verá más o menos así para que el método de su objeto arroje una excepción.

[TestMethod] 
[ExpectedException(typeof(InvalidOperationException))] 
public void YourMethod_ThrowsIOException() 
{ 
    var mock = new Moq<YourClass>(); 
    mock.Setup(obj => obj.YourMethod(It.IsAny<string>())).Throws<InvalidOperationException>(); 

    YouClass mockedClass = mock.Object; 

    mockedClass.YourMethod("anything"); 
} 

Espero que esto ayude.

3

Usted podría utilizar

bool toThrow = false; 
if(toThrow) 
{ 
    throw new Exception("Test"); 
} 

tiro y el cambio de verdad. O crea un método/propiedad y llámalos.

32

La única manera realmente viable que he encontrado para arrojar excepciones desde un método durante la depuración es extraer la variable de debajo de los pies del proceso de ejecución. Es decir. establecer una variable que está a punto de usarse para anular lanzará obviamente una excepción tan pronto como se ejecute. Sin embargo, esto no le permitirá lanzar excepciones personalizadas (por ejemplo, tipos específicos o mensajes).

Para excepciones específicas tenemos que modificar el código de acuerdo con las publicaciones anteriores.

+1

simple y al grano ... ¡gracias! – iGanja

0

Si está leyendo esta respuesta, Visual Studio 2013 está disponible y admite Editar y Continuar en aplicaciones de 64 bits. Si tiene Visual Studio 2013 y solo está buscando una forma de lanzar excepciones aquí y allá para ver cómo funcionan sus páginas de manejo de excepciones o errores, solo use Editar y Continuar y escriba directamente en su código.

Haga clic en Depurar> Iniciar la depuración. Tu aplicación web se inicia. Coloque un punto de interrupción. Haga clic en su aplicación hasta que llegue el punto de interrupción. Ahora puede agregar instrucciones de tiro directamente en su código. Simplemente ingrese throw new Exception("test") o lo que sea, guarde el archivo y haga clic en continuar (avance su depurador) y procesará la línea que acaba de agregar como si la hubiera compilado.

+0

el método que está describiendo figura en la pregunta en sí y realmente no veo por qué el cambio en VS2013 para apoyar la edición y continuar en la aplicación de 64 bits es relevante aquí. – Clueless

Cuestiones relacionadas