2011-11-23 53 views
10
工作

考慮下面的C#程序:Debug.Assert的似乎不是單聲道

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。

+1

D'oh。我認爲我的答案按照接受的方式工作。我已經更新了答案,並且仔細檢查了這次是否有效。簡而言之:'單聲道'不帶有像微軟的.NET這樣的對話框;除非您設置跟蹤偵聽器,否則它什麼也不做。 – dtb

+0

謝謝。使用「export MONO_TRACE_LISTENER = Console.Out」,斷言失敗被寫入控制檯。 –

回答

8

C#的單 - 從文章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 TRACE 

微量添加

#define DEBUG 

見這裏的解決方案:http://lists.ximian.com/pipermail/mono-list/2006-December/033774.html

P.S:我試圖與C++而不是C#。這可能不適用於C#。

+0

謝謝,但它不起作用。即使在代碼開始時遇到#define DEBUG,斷言和失敗也會被忽略。 –

+1

這個怎麼樣? http://ebsteblog.wordpress.com/2009/05/06/debugassert-and-mono/ –

+0

謝謝,這個作品很棒!我把該網頁上描述的xml放在與Main.exe相同的目錄下的Main.exe.config文件中。之後,斷言失敗產生一個對話框。 –

1

您可以使用XML配置,也可以在運行時添加跟蹤,監聽器將它放在程序的控制下:

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

這有你能後啓用該功能的附加優勢該計劃已經開始。