注意:
以Trace類做示例,但Debug類也通用。
Trace.Listeners默認是一個System.Diagnostics.DefaultTraceListener類型,這個類型的偵聽器會在斷言時彈出一個對話框,如下代碼:
// using System.Diagnostics;
Trace.Assert(false,"hehe");
執行后會出現如下對話框:
hehe
方法一就是清空Trace的默認偵聽器,然后加入自己的偵聽器,比如TextWriterTraceListener:
后台:
using System.Diagnostics; namespace test_trace{ public class test{ public void main(){ Trace.Listeners.Clear(); //自動清空緩沖(即時寫入) Trace.AutoFlush=true; Trace.Listeners.Add(newTextWriterTraceListener("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)