调试.Assert在Mono中似乎不起作用

本文关键字:不起作用 Mono Assert 调试 | 更新日期: 2023-09-27 18:15:45

考虑以下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上检查了其他相关问题,但我找不到解决方案。特别给出了单路调试的解决方案。断言不工作不工作。(更新:更新后的解决方案确实有效,请参阅下面的注释)

我在Ubuntu 11.10上使用Mono 2.10.5-1

调试.Assert在Mono中似乎不起作用

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#。

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

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

这有一个额外的好处,您可以在程序启动后启用它。