Debug.Assert, похоже, не работает в 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!");
        }
    }
}

При компиляции с использованием:

dmcs -debug -d:DEBUG Main.cs

а затем запустите его с помощью:

mono --debug Main.exe

утверждение и неудача, похоже, игнорируются. Вывод:

Hello World!

Я проверил другие связанные вопросы в StackOverflow, но я не смог найти решение. В частности, решение, полученное в Моно - Debug.Assert не работает, не работает. (ОБНОВЛЕНИЕ: обновленное решение работает, см. Ниже комментарии.)

Я использую Mono 2.10.5-1 на Ubuntu 11.10.

Ответ 1

С# на моно - 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>

Старый ответ: комментарий С++, если вы не указали -define DEBUG в параметрах командной строки/компиляции.

Отладка добавить

#define DEBUG

в начале кода или

#define TRACE

для трассировки.

См. решение здесь: http://lists.ximian.com/pipermail/mono-list/2006-December/033774.html

p.s: Я пробовал это с С++, а не с С#. Это может не работать для С#.

Ответ 2

Вы можете использовать конфигурацию xml, или вы можете разместить ее под управлением вашей программы, добавив прослушиватель трассировки во время выполнения:

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

Это имеет дополнительное преимущество, когда вы можете включить его после запуска программы.