注意:
以Trace類做樣本,但Debug類也通用。
Trace.Listeners預設是一個System.Diagnostics.DefaultTraceListener類型,這個類型的接聽程式會在斷言時彈出一個對話方塊,如下代碼:
//+ using System.Diagnostics;
Trace.Assert(false, "hehe");
執行後會出現如下對話方塊:
方法一就是清空Trace的預設接聽程式,然後加入自己的接聽程式,比如TextWriterTraceListener:
Trace.Listeners.Clear();
//自動清空緩衝(即時寫入)
Trace.AutoFlush = true;
Trace.Listeners.Add(new TextWriterTraceListener("app.log"));
Trace.Assert(false, "hehe");
第二種方法就是通過修改應用程式集的設定檔(app.config)
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<!-- 刪除預設接聽程式 -->
<clear />
<!-- 加入接聽程式 -->
<add name="listener1"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="app.log" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
第三種方法也是在設定檔裡,其實<system.diagnostics>元素下有直接對斷言的支援,使用<assert>元素。assertuienabled屬性代表是否顯示斷言對話方塊,而logfilename代表記錄檔案的位置。
<configuration>
<system.diagnostics>
<assert assertuienabled="false"
logfilename="app.log"/>
</system.diagnostics>
</configuration>
最後需要注意的是第三種方法輸出的記錄最詳細,而且不需要設定Trace類的屬性。第一行的”hehe”是前兩種方法的輸出。而後面的文字全是第三種方法的輸出。
Fail: hehe
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
hehe
---- Assert Long Message ----
at Program.Main() e:\users\mgen\documents\visual studio 2010\Projects\Mgen\Mgen\Program.cs(11)