2011-11-23 16 views
10

Consideremos el siguiente programa en C#:Debug.Assert no parece funcionar en Mono

using System; 
using System.Diagnostics; 

namespace Test 
{ 
     class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Debug.Assert(false); 
      Debug.Fail("fail!"); 
      Console.WriteLine ("Hello World!"); 
     } 
    } 
} 

Al compilar esta usando:

dmcs -debug -d:DEBUG Main.cs 

y luego ejecutarlo con:

mono --debug Main.exe 

la afirmación y el fracaso parecen ser ignorados. La salida es justa:

Hello World! 

He comprobado otras preguntas relacionadas en StackOverflow, pero no he podido encontrar una solución. En particular, la solución dada en Mono - Debug.Assert does not work no funciona. (ACTUALIZACIÓN: la solución actualizada funciona, consulte los comentarios a continuación.)

Uso Mono 2.10.5-1 en Ubuntu 11.10.

+1

D'oh. Supuse que mi respuesta funcionó ya que fue aceptada. Actualicé la respuesta y comprobé que funcione esta vez. En resumen: 'mono' no viene con un cuadro de diálogo como .NET de Microsoft; no hace nada a menos que establezca un oyente de rastreo. – dtb

+0

Gracias. Usando "export MONO_TRACE_LISTENER = Console.Out", el error de aserción se escribe en la consola. –

Respuesta

8

C# en mono - http://ebsteblog.wordpress.com/2009/05/06/debugassert-and-mono/

extracto del artículo:

... si crea un archivo .config para su aplicación y establece el atributo assertuienabled a verdadero, se obtiene el mismo diálogo que con .NET ... File app.config:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.diagnostics> 
     <assert assertuienabled="true" /> 
    </system.diagnostics> 
</configuration> 

vieja respuesta: C++ comentario si no se ha especificado DEBUG -Definir en la línea de comandos/opciones de compilación.

Para añadir depuración

#define DEBUG 

al comienzo del código o

#define TRACE 

para dejar rastro.

ver la solución aquí: http://lists.ximian.com/pipermail/mono-list/2006-December/033774.html

p.s: He intentado esto con C++ no C#. Esto puede no funcionar para C#.

+0

Gracias, pero no funciona. Incluso con #define DEPURACIÓN al comienzo del código, se ignoran las afirmaciones y fallas. –

+1

¿qué tal esto? http://ebsteblog.wordpress.com/2009/05/06/debugassert-and-mono/ –

+0

¡Gracias, esto funciona genial! Puse el xml descrito en esa página web en un archivo Main.exe.config en el mismo directorio que Main.exe. Después de eso, una falla de afirmación produce un cuadro de diálogo. –

1

Puede utilizar la configuración XML, o se puede colocar bajo el control de su programa mediante la adición de una escucha de seguimiento en tiempo de ejecución:

var tl = new System.Diagnostics.ConsoleTraceListener(); 
System.Diagnostics.Debug.Listeners.Add (tl); 

Esto tiene la ventaja añadida de que seas capaz de activarla después el programa ha comenzado.

Cuestiones relacionadas