2012-05-10 9 views
9

Noto que Debug.Assert no se activa en las aplicaciones de Metro, sin embargo, si el proyecto es tradicional como Console o WinForm, se activa. Y sí, estoy en modo de depuración.Debug.Assert (false) no se activa en las aplicaciones win8 Metro

¿Es una configuración no configurada correctamente en Visual Studio (11 Beta)? ¿O Debug.Assert está destinado a estar deshabilitado en las aplicaciones metropolitanas?

Sé que se tragarán muchas excepciones durante la ejecución de las aplicaciones de Metro, pero Debug.Assert es tan útil que no puedo pensar en una razón por la que deba deshabilitarse.

Respuesta

2

Se no gatillo, mira en la ventana de salida. Simplemente no te pide automáticamente que preguntes si quieres un descanso del depurador y, por lo tanto, simplemente sigues conduciendo.

La propiedad DefaultTraceListener.AssertUIEnabled es falsa. Es un problema de implementación, no se puede mostrar un cuadro de mensaje encima de la IU de Metro. Lo que realmente funciona, pero el monitor cambia al escritorio, bastante indeseable cuando le gustaría hacer clic en No. Difícil de resolver y sin duda en la lista de tareas pendientes. No puede acceder fácilmente a la propiedad para establecerla en verdadero, es inaccesible desde los metadatos. La solución alternativa de Filip suena medio decente.

+0

Tal vez esta publicación se realizó antes de la versión actual de metro, pero DefaultTraceListener ya no parece existir para las aplicaciones de Metro. – James

+0

@James: eso es lo que significa "inaccesible de los metadatos". Y no, se comporta de forma incorrecta en VS2010 RC. Esto es fácil de probar, hágalo antes de rechazar una respuesta. –

+0

Lo probé y DefaultTraceListener.AssertUIEnabled no se puede establecer en el código porque no existe. – James

6

Parece un error. Yo lanzaría mi propio método de afirmación. Algo así como:

[Conditional("DEBUG")] 
public static void Assert(bool condition) 
{ 
    if (!condition) 
     System.Diagnostics.Debugger.Break(); 
} 
+0

Funciona para mí :) – kennyzx

0

Existe el mismo problema con F # en WinRT, en VS2013. La instrucción assert, que es un alias para System.Diagnostics.Debug.Assert, no genera una excepción, por lo tanto, a menos que esté viendo la ventana Salida, sus afirmaciones pueden fallar sin que se note. Incluso si está mirando, es difícil encontrar el lugar donde se planteó la afirmación.

que siguieron la sugerencia de Filip y escribió un corto utilidad, de la siguiente manera:

namespace MyProj.Infrastructure 

module Diagnostics = 

    let Assert condition = if not condition then 
           System.Diagnostics.Debugger.Break() 

me eligieron Debugger.Break sobre lanzar una excepción porque se detiene el depurador en el lugar no la afirmación. Sin embargo, plantear una excepción es una alternativa aceptable.

No tenía proyectos o módulos globales adecuados en mi solución, así que tuve que crearlos solo para esto, lo cual fue bastante molesto.

Cuestiones relacionadas