乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       高亮的知識庫 2012-02-20

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

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

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

      一、Trace Debug 的異同。

      Trace 與 Debug 類均位于 System.Diagnostics. 我們在使用時,只需要引入該 namespace,同時在任何需要的地方直接調(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 兩個均輸出到調(diào)試環(huán)境中,比如,如果開啟了DebugView,就可以看到類似如下的輸出:

      Debug: Parameter is null! 
      Trace: Application Started!

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

      clip_image002

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

      二、Listener

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

      1
      public static TraceListenerCollection Listeners { get; }

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

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

      .Net 內(nèi)置若干 Listener,常用的包括 ConsoleTraceListener,ConsoleTraceListener,XmlWriterTraceListener 等,使用方法很簡單。比如我們想將 Trace 信息寫入一個文本文件 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>

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

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

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

      三、參考資料:

      1. MSDN 中的 Trace 類

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多