一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 高亮的知識(shí)庫 2012-02-20

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

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

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

一、Trace Debug 的異同。

Trace 與 Debug 類均位于 System.Diagnostics. 我們?cè)谑褂脮r(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)?,默認(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è)屬性用于注冊(cè)監(jiān)聽器。實(shí)際上,無論 Debug 還是 Trace,都有一個(gè)默認(rèn)的監(jiān)聽器。對(duì)于 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 等,使用方法很簡(jiǎn)單。比如我們想將 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è)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩熟妇人妻一区二区三区| 男人大臿蕉香蕉大视频| 蜜桃臀欧美日韩国产精品| 欧美日韩免费黄片观看| 免费在线观看激情小视频| 国产精品自拍杆香蕉视频| 精品香蕉一区二区在线| 国产精品日韩精品一区| 老熟妇2久久国内精品| 日韩国产亚洲欧美激情| 老司机精品在线你懂的| 又黄又硬又爽又色的视频| 少妇人妻中出中文字幕| 欧美日韩精品视频在线| 国产又色又爽又黄又大| 亚洲一区二区三区三州| 国产一区二区在线免费| 国产av乱了乱了一区二区三区 | 国产av熟女一区二区三区四区| 老熟妇乱视频一区二区| 亚洲视频偷拍福利来袭| 中文字字幕在线中文乱码二区| 欧美亚洲国产日韩一区二区| 丰满人妻一二区二区三区av| 亚洲天堂精品在线视频| 亚洲专区一区中文字幕| 国产伦精品一区二区三区高清版| 91日韩欧美国产视频| 欧美日韩综合综合久久久| 日韩av亚洲一区二区三区| 国产日韩综合一区在线观看| 国产一区二区久久综合| 久久女同精品一区二区| 99久久国产综合精品二区 | 日本人妻免费一区二区三区| 国产日韩精品激情在线观看| 深夜少妇一区二区三区| 久久热九九这里只有精品| 日韩国产传媒在线精品| 中文字幕熟女人妻视频| 日本高清视频在线播放|