考虑以下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!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法编译时:
dmcs -debug -d:DEBUG Main.cs
Run Code Online (Sandbox Code Playgroud)
然后运行它:
mono --debug Main.exe
Run Code Online (Sandbox Code Playgroud)
断言和失败似乎被忽略了.输出只是:
Hello World!
Run Code Online (Sandbox Code Playgroud)
我在StackOverflow上检查了其他相关问题,但我找不到解决方案.特别是Mono中的解决方案- Debug.Assert无法正常工作.(更新:更新的解决方案确实有效,请参阅以下注释.)
我在Ubuntu 11.10上使用Mono 2.10.5-1.
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>
Run Code Online (Sandbox Code Playgroud)
旧答案:C++注释如果未在命令行/编译选项上指定-define DEBUG.
用于调试添加
#define DEBUG
Run Code Online (Sandbox Code Playgroud)
在代码的开头或
#define TRACE
Run Code Online (Sandbox Code Playgroud)
追踪.
请在此处查看解决方案:http://lists.ximian.com/pipermail/mono-list/2006-December/033774.html
ps:我用C++而不是C#试过这个.这可能不适用于C#.