小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

在 .NET 程序中啟用調(diào)試信息輸出

 高亮的知識庫 2012-02-20

在 .NET 程序中啟用調(diào)試信息輸出

我們在開發(fā)當(dāng)中,有時(shí)需要添加一些調(diào)試信息,以便在脫離集成調(diào)試環(huán)境時(shí)捕捉錯(cuò)誤。Win32 編程常用 OutputDebugString 這個(gè)函數(shù)配合 DebugView 等工具來在程序中插入調(diào)試信息。為了將調(diào)試信息寫入日志,也有很多方法和第三方工具,比如著名的 log4cxx。

.Net 平臺下,我們只需要簡單的調(diào)用 Trace 和 Debug 這兩個(gè)類,即可實(shí)現(xiàn)大部分調(diào)試輸出。

一、Trace Debug 的異同。

Trace 與 Debug 類均位于 System.Diagnostics. 我們在使用時(shí),只需要引入該 namespace,同時(shí)在任何需要的地方直接調(diào)用即可。最大的區(qū)別在于,Debug 類僅在 Debug 模式下編譯有效,而 Trace 類在 Debug 和 Release 模式下均可工作。例如這段代碼:

1
2
3
4
5
6
7
8
9
if (null == param1) 
    Debug.Fail("Debug: Parameter is null!"); // A 
    return
}
  
Trace.TraceInformation("Trace: Application Started!"); // B
  

默認(rèn)情況下,在 Debug 模式下編譯,以上 A,B 兩個(gè)均輸出到調(diào)試環(huán)境中,比如,如果開啟了DebugView,就可以看到類似如下的輸出:

Debug: Parameter is null! 
Trace: Application Started!

如果在 Release 模式下編譯代碼并運(yùn)行,使用 DebugView 觀察,兩個(gè)輸出均無。這是因?yàn)椋J(rèn)情況下,編譯器為 Debug 模式添加了 “DEBUG” 和 “TRACE” 兩個(gè)條件,而 Relase 模式僅有 “TRACE” 條件。這是默認(rèn)設(shè)置,可以手工修改,修改位置在 Project->Properties->Build。如下圖所示:

clip_image002

既然 Trace 在 Release 模式也可以工作,為什么我們不能在 DebugView 中看到輸出呢?這是因?yàn)椋覀儧]有設(shè)置正確的 Listener。Debug 類默認(rèn)輸出至調(diào)試器。而 Trace 類僅在開啟 DEBUG 參數(shù)模式下輸出至調(diào)試器。我們可以自行制定 Trace 信息的輸出,通過添加 Listener。

二、Listener

Listerner,又稱為監(jiān)聽器。打開 .NET 中 Debug 和 Trace 類的定義,可以看到他們都有一個(gè)集合屬性 Listeners:

1
public static TraceListenerCollection Listeners { get; }

這個(gè)屬性用于注冊監(jiān)聽器。實(shí)際上,無論 Debug 還是 Trace,都有一個(gè)默認(rèn)的監(jiān)聽器。對于 Trace 來說,這個(gè)監(jiān)聽器是 Console,如果沒有在程序中創(chuàng)建 Console 窗口,它的輸出就是當(dāng)你按下 F5 時(shí),IDE 的 output 窗口。這在 Release 條件下仍然有效。

但是,我們要解決的,是脫離 IDE 環(huán)境時(shí)的調(diào)試信息輸出,這就需要手工指定 Lisenter。

.Net 內(nèi)置若干 Listener,常用的包括 ConsoleTraceListener,ConsoleTraceListener,XmlWriterTraceListener 等,使用方法很簡單。比如我們想將 Trace 信息寫入一個(gè)文本文件 MyApp.log,只要打開 app.config,加入以下代碼行:

1
2
3
4
5
6
7
8
9
10
11
<system.diagnostics
  <trace autoflush="true" indentsize="4"
    <listeners
      <add name="consoleListener" 
        type="System.Diagnostics.ConsoleTraceListener" /> 
      <add name="fileLogListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="MyApp.log" /> 
    </listeners
  </trace
</system.diagnostics>

重新編譯并運(yùn)行程序,在exe文件所在的目錄下,會(huì)自動(dòng)生成一個(gè) MyApp.log 文件,里面就是想要的內(nèi)容。

以上代碼也可以在程序源代碼中調(diào)用 Trace/Debug 類的成員函數(shù)來實(shí)現(xiàn)。但是為了保持源代碼在不同配置下的一致性,便于我們隨時(shí)取消 Trace 信息(比如產(chǎn)品發(fā)布),建議將這個(gè)工作放在 App.config 進(jìn)行。

我們還可以通過實(shí)現(xiàn) TraceListener 來定義自己的 Listener,這不在本文的討論范圍,有興趣的同學(xué)可自行查閱 MSDN。

三、參考資料:

1. MSDN 中的 Trace 類;

2. Use of Listener in .NET Framework with C#

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多