2011-10-21 15 views
6

Estoy usando Visual Studio 2010 para escribir una afirmación de .NET:Debug.Assert() sólo se activa cuando se pisa sobre él

Debug.Assert(false, "Testing Debug.Assert"); 

Cuando pongo un punto de interrupción en esta línea de código, espere hasta el punto de interrupción hits, y luego dejar que el programa continúe ejecutándose, todo funciona bien: aparece un cuadro de diálogo de "Assertion Failed". Sin embargo, cuando elimino el punto de interrupción y vuelvo a ejecutar la aplicación, la instrucción Debug.Assert() simplemente se ignora.

¿Alguien tiene una idea de lo que podría causar este comportamiento tan extraño?

+2

es usted 100 ¿Está seguro de que está ejecutando la versión de depuración? Sé que esta es una pregunta potencialmente estúpida, pero lo he hecho muchas veces. – ChrisF

+0

Cuando "vuelve a ejecutar la aplicación", ¿lo está ejecutando en el depurador, o no? (F5 o Ctrl-F5?) ¿Estás usando una edición Express por casualidad? –

+0

Intente reconstruir la aplicación – xanatos

Respuesta

3

Un colega mío supo de inmediato cuál era el problema. Tuve que habilitar el indicador "Habilitar mi código" en "Visual Studio 2010/Menú/Opciones/Depuración/General". Aparentemente este es un bug in Visual Studio 2010".

2

Estaba teniendo el mismo problema. El uso de Trace.Assert funciona como se esperaba.


Bueno, Trace.Assert comenzó a exhibir el mismo comportamiento en la próxima sesión de depuración.


Ah, ha encontrado el problema.

  • Con 'Habilitar Sólo mi código" marcada.

    • Si 'Arrojado' está marcada por 'Common Language Runtime Excepciones' en el 'diálogo Excepciones'(Ctrl + Alt + E) , la aserción será lanzada.

    • Si no se controla, la aserción será lanzada.

  • Con 'Habilitar solo mi código' desmarcado.

    • Si marca 'Thrown', el Assert no se arrojará.

    • Si 'Lanzado' no seleccionado, se lanzará el Assert.

Por lo tanto, la aserción no se inicia cuando se produce 'Habilitar Sólo mi código' no está marcada y 'Arrojado' está marcada por 'Common Language Runtime Excepciones'.

+1

El mismo comportamiento nos ha sucedido en VS 2013, pero incluso con "Habilitar solo mi código" marcado. –

+0

¿Dónde puedo encontrar esta cosa "lanzada" en el cuadro de diálogo Excepción? No veo esa entrada allí? ¿Cuál es el nombre completo de la excepción que necesitamos desmarcar? –

0

las respuestas dadas aquí no ayudó, pero me pareció que era tan sencillo como marcar la opción "Definir constante DEBUG" para la configuración de depuración en la configuración de generación del proyecto:

The Define DEBUG constant option in project's build settings

Cuestiones relacionadas