Debug.Assert似乎不适用于Mono

时间:2011-11-23 16:03:54

标签: c# mono

考虑以下C#程序:

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!");
        }
    }
}

使用以下方法编译时:

dmcs -debug -d:DEBUG Main.cs

然后用:

运行它
mono --debug Main.exe

断言和失败似乎被忽略了。输出只是:

Hello World!

我在StackOverflow上检查了其他相关问题,但我找不到解决方案。特别是Mono - Debug.Assert does not work中给出的解决方案不起作用。 (更新:更新的解决方案确实有效,请参阅下面的评论。)

我在Ubuntu 11.10上使用Mono 2.10.5-1。

2 个答案:

答案 0 :(得分:8)

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

摘自文章:

...如果您为应用创建.config文件并将assertuienabled属性设置为true,则会得到与.NET相同的对话框...文件app.config:

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

旧答案:C ++注释,如果你没有在命令行/编译选项上指定-define DEBUG。

对于调试添加

#define DEBUG

在代码的开头或

#define TRACE

追踪。

请在此处查看解决方案:http://lists.ximian.com/pipermail/mono-list/2006-December/033774.html

p.s:我用C ++而不是C#试过这个。这可能不适用于C#。

答案 1 :(得分:1)

您可以使用xml配置,也可以通过在运行时添加跟踪侦听器将其置于程序的控制之下:

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

这样做的另一个好处是,您可以在程序启动后启用它。