1. 程式人生 > >【原創】.NET中Trace類和Debug類的應用舉例

【原創】.NET中Trace類和Debug類的應用舉例

 

.NET中Trace類和Debug類的應用舉例

.NET中的Trace類和Debug類是System.Diagnostics名稱空間下的兩個用於除錯的類,在軟體開發中使用得當,可以幫助我們除錯開發程式,提高效率,很有用。其中,Debug類僅在除錯版本中有效,而Trace類在除錯版本和正式版本中均有效。

1)下面先介紹下Debug類的使用:

Debug類的宣告原型:public sealed class Debug

從宣告中,我們可以看出,Debug類是無法繼承的。它的成員情況,請參見:

先看一個例子:

TestDebug.cs

/*

* User: GoGo

* Date: 2007-12-12

* Email:[email protected]

* Blog:http://blog.csdn.net/id_9527

*/

using System;

using System.Collections.Generic;

using System.Text;

using System.Diagnostics; //引入Debug類所在名稱空間

namespace traceanddebug

{

class TestDebug

{

public static void TestDebugMethod()

{

Debug.Listeners.Add(new TextWriterTraceListener

(Console.Out));

//Debug類輸出定向到控制檯輸出

Debug.AutoFlush = true;

//設定Debug為自動輸出,即每次寫入後都呼叫Listeners上呼叫Flush

Debug.Indent();

//設定縮排

Debug.WriteLine("Debug WriteLine()");

//Debug輸出"Debug WriteLine()"

Console.WriteLine("Console.WriteLine()");

//Console輸出"Console.WriteLine()"

Debug.WriteLine("Debug WriteLine2()");

//Debug

輸出"Debug WriteLine2()"

Debug.Unindent();

//取消縮排

Console.Read();

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Text;

namespace traceanddebug

{

class Program

{

static void Main(string[] args)

{

TestDebug.TestDebugMethod();

}

}

}

結果顯示如下:

Debug WriteLine()

Console.WriteLine()

Debug WriteLine2()

從例子中,我們可以看出,Debug可以向控制檯顯示資訊。需要注意的是,我們在使用Debug時候,需要引入System.Diagnostics名稱空間。同樣,我們也可以把資訊寫入文字中,例如,把TestDebug.cs

Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));

一句修改為:

Debug.Listeners.Add(new TextWriterTraceListener("c://testdebug2.log","testdebug"));

就可以向c盤的根目錄下的testdebug2.log檔案中寫入資訊了。

給你留個小問題,你能讓debug資訊寫入windows的事件檢視器裡面麼?

(看看下面的Trace類的例子,也許你就有思路了)

值得注意的是,Debug類的程式碼在release版本中是無效的,也就是說,所有的Debug類輸出語句在釋出的時候,是不會輸出的,你不用特意刪除Debug類的程式碼,就能給使用者一個沒有除錯語句的程式了。這個用起來是不是很方便呢?

Debug類除了輸出資訊之外,還有一個靜態成員函式很有用,就是Debug.Assert方法。它有三種過載形式:

Debug.Assert(Boolean)

Debug.Assert(Boolean, String)

Debug.Assert(Boolean, String)

它的作用為:檢查條件,如果該條件為 false,則顯示訊息。此函式會顯示相關堆疊資訊。

例如,我們在上面的TestDebug.csTestDebugMethod函式中加入一下語句:

Debug.Assert(false,"test assert");

那麼執行時,就會停在Debug.Assert呼叫的地方,彈出一個對話方塊,顯示資訊及堆疊資訊。我們在實際應用的時候,需要講例子中的false換成條件判斷,如果不滿足條件,就會停止。

2)下面介紹Trace類的使用:

Trace類的宣告原型為:public sealed class Trace,其成員情況,請參加網址:

同樣,我們先從小例子來認識Trace類:

TestTrace.cs

/*

* User: GoGo

* Date: 2007-12-12

* Email:[email protected]

* Blog:http://blog.csdn.net/id_9527

*/

using System;

using System.Diagnostics;

namespace traceanddebug

{

public class TestTrace

{

public static void TheTrace()

{

Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

Trace.WriteLine("Trace !!!");

Console.ReadKey();

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Text;

namespace traceanddebug

{

class Program

{

static void Main(string[] args)

{

TestTrace.TheTrace();

}

}

}

編譯執行程式,輸出結果如下:

Trace !!!

從這個例子中,我們可以看出,Trace類可以像Debug類一樣輸出資訊到控制檯。同樣,Trace類可以設定輸出定向到文字檔案或者日誌中。可以新增一下程式碼測試:

Trace.Listeners.Add(new TextWriterTraceListener("testtrace.log"));

Trace.Listeners.Add(new EventLogTraceListener("testtrace"));

Trace.AutoFlush = true;

這樣就同時把Trace!!這個字串寫入testtrace.log檔案和事件檢視器中應用程式裡面了。

除了在程式中設定資訊輸出位置外,還可以在配置檔案中設定跟蹤除錯資訊的輸出位置。預設是在控制檯輸出。我們可以通過新增配置引數,修改輸出位置。例如:

假設我們的執行程式為traceanddebug.exe,我們在相同目錄下建立traceanddebug.exe.config配置檔案,輸入如下內容:

<configuration>

<system.diagnostics>

<trace autoflush="true" indentsize="1">

<listeners>

<remove name="Default"></remove>

<add type="System.Diagnostics.EventLogTraceListener" name="myEventLog" initializeData="application">

</add>

</listeners>

</trace>

</system.diagnostics>

</configuration>

這樣我們可以修改程式TheTrace()為:

//Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

Trace.WriteLine("Trace !!!");

Console.ReadKey();

這樣就可以把結果直接寫入事件檢視器中。

由於Trace類可以在釋出版本中起作用,所以,在做Trace輸出資訊的時候,可能有些資訊是除錯的時候需要,釋出的時候又不需要了,那怎麼才能保證資訊不在釋出的時候輸出呢?.NET為我們提供了五個控制Trace的跟蹤級別,使用它們不必重新編譯,他們跟別是:

Trace Level

Value

顯示(或寫入指定輸出目標)的訊息型別

Off

0

無,即關閉顯示資訊

Errors

1

僅限錯誤資訊

Warnings

2

警告訊息和錯誤資訊

Info

3

提示資訊、警告訊息和錯誤資訊

Verbose

4

詳細訊息、提示性訊息、警告訊息和錯誤資訊

是否顯示訊息,由TraceSwich開關類決定。即如果設定開關為4,那麼所有的Trace訊息都將顯示;如果設定為3,那麼設定為VerboseTrace訊息就不顯示了,其餘的都顯示;如果設定為0,所有的訊息都不顯示了。這裡設定的開關,可以在配置檔案中設定,也可以在程式中設定,下面就舉例說明。

TestTrace.cs

/*

* User: GoGo

* Date: 2007-12-12

* Email:[email protected]

* Blog:http://blog.csdn.net/id_9527

*/

using System;

using System.Diagnostics;

namespace traceanddebug

{

public class TestTrace

{

public static TraceSwitch ts = new TraceSwitch("mySwitch", "in the Config file");

public static void TheTrace()

{

Trace.WriteLineIf(ts.TraceError,"Error!!!");

Trace.WriteLineIf(ts.TraceWarning,"Warning!!!");

Trace.WriteLineIf(ts.TraceInfo,"Info!!!");

Trace.WriteLineIf(ts.TraceVerbose,"Verbose!!!");

Console.ReadKey();

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Text;

namespace traceanddebug

{

class Program

{

static void Main(string[] args)

{

TestTrace.TheTrace();

}

}

}

編譯出的可執行檔名為:traceanddebug.exe

我們在相同目錄下,新增配置檔案traceanddebug.exe.config,並輸入內容為:

traceanddebug.exe.config

<configuration>

<system.diagnostics>

<switches>

<add name="mySwitch" value="0" />

</switches>

</system.diagnostics>

</configuration>

編譯執行,沒有顯示資訊。我們將traceanddebug.exe.config用記事本開啟,修改mySwitch的值為1,儲存,編譯執行,結果顯示”Error!!!”;同理,我們依次,將值修改為234檢視結果,分別為Warning!!!Info!!!Verbose!!!

有此,我們可以看出,通過控制開關級別,就可以顯示不同的級別的資訊,而不用重新編譯,那麼及時在軟體已經發布的時候,我們也可以通過修改配置檔案,而檢視相關資訊。

通過以上的內容,我們可以對TraceDebug類有個大概的瞭解,那麼如果你需要除錯程式,不妨用一下這兩個類。

相關推薦

原創.NETTraceDebug應用舉例

  .NET中Trace類和Debug類的應用舉例 .NET中的Trace類和Debug類是System.Diagnostics名稱空間下的兩個用於除錯的類,在軟體開發中使用得當,可以幫助我們除錯開發程式,提高效率,很有用。其中,Debug類僅在除錯版本中有效,而Trace

CSS的浮動清除浮動

但是 spa 下拉 而已 ges 推薦 授權 自己的 -c 以下轉自《CSS中的浮動和清除浮動,梳理一下!》 浮動到底是什麽? 浮動核心就一句話:浮動元素會脫離文檔流並向左/向右浮動,直到碰到父元素或者另一個浮動元素。請默念3次! 浮動最初設計的目

原創MapReduce運行原理過程

文件合並 pil file 運行流程 dfs lec 線程 操作 合並 一.Map的原理和運行流程 Map的輸入數據源是多種多樣的,我們使用hdfs作為數據源。文件在hdfs上是以block(塊,Hdfs上的存儲單元)為單位進行存儲的。 1.分片 我們將

原創Mysqlselect的正確姿勢

引言 大家在開發中,還有很多童鞋在寫查詢語句的時候,習慣寫下面這種不規範sql select * from table 而不寫成下面的這種規範方式 select col1,col2,...,coln from table 我也知道,這些童鞋是圖方便,畢竟再敲一堆的列名,嫌麻煩! 你們上班可以問問自己

Ansible Playbook 的變數引用

Playbook 中的變數和引用1.1 通過Inventory來定義host和group變數說明:1. host 變數只對當前host起作用2. group 變數對組內的所有host起作用示例Inventory定義 [test]ansible1ansible2ansible3[test:vars]inv

Pythonpython 的 memoize memoized

python 中編寫遞迴函式時,為減少計算時間,需要用到 memoize 或 memoized 功能。 它們的作用是:記憶函式每次執行的結果,當遞迴函式每次遞迴時,若已經計算過子函式,就直接從記憶中的

原創面試肯定會被問到的 2 個問題

之前我分別用三篇文章對簡歷和麵試注意事項做了說明: 《簡歷中千萬不要出現的 3 個問題》 《簡歷中打動人的 3 個關鍵點》 《面試時經常會被問到的 3 個問題》 今天是這個系列的第四篇,我們繼續聊面試,這次的兩個問題是: 為什麼離職? 本次想找一個什麼樣的工作

原創yii1使用導航CBreadcrumbs詳解

關於使用框架中預設的導航, 在網上搜了很久,都沒有一個比較全面的解釋, 想了想,就研究研究原始碼自己總結一個算了: 一、在main.php頁面佈局中,倒入使用導航麵包屑widget:CBreadcrumbs <? $this->widget('zii.widgets.CBreadcrumbs',

原創資料庫為什麼不推薦使用外來鍵約束

引言 其實這個話題是老生常談,很多人在工作中確實也不會使用外來鍵。包括在阿里的JAVA規範中也有下面這一條 【強制】不得使用外來鍵與級聯,一切外來鍵概念必須在應用層解決。 但是呢,詢問他們原因,大多是這麼回答的 每次做DELETE 或者UPDATE都必須考慮外來鍵約束,會導致開發的時候很痛苦,測試資料

原創演算法分享(5)聚演算法DBSCAN

簡介 DBSCAN:Density-based spatial clustering of applications with noise is a data clustering algorithm proposed by Martin Ester, Hans-Peter

分類器是如何做檢測的?——檢測的LBPHAAR特徵計算過程

 前面介紹分類器檢測過程的示例中是以HOG特徵為例,那LBP和HAAR特徵在xml中是如何表達和測試的呢? 2.3    LBP與HAAR特徵 HAAR特徵的計算和表達方式與HOG很類似,在OpenCV的haartraining.exe中,feature儲存在每個weakc

轉載C# 的委託事件(詳解:簡單易懂的講解) C# 的委託事件(詳解)

本文轉載自http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html C# 中的委託和事件(詳解) C# 中的委託和事件

Android專案資料夾檔案的作用

Table of Contents 資料夾的作用  檔案的作用    資料夾的作用  No. 資料夾 描述 1 src 存放

原創[更新]CSDN·Markdown·KaTex/LaTex 用法小全

為你撰寫的故事 KaTex 〇、區分LaTex和KaTex 一、如何插入公式 分類 行中公式 獨立公式 注意 二、關於{},text{}與oper

原創.NET讀寫Excel工具Spire.Xls使用(3)單元格控制

  前一篇文章:“.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制”給大家介紹了C#使用Spire.XLS來控制Excel檔案的基本功能和相關實踐程式碼。這篇文章將重點介紹C#操作Excel檔案時,對Excel單元格的控制。   以前在使用NPOI的時候,其實印象最深的還是

原創.NET讀寫Excel工具Spire.Xls使用(1)入門介紹

  在.NET平臺,操作Excel檔案是一個非常常用的需求,目前比較常規的方法有以下幾種: 1.Office Com元件的方式:這個方式非常累人,微軟的東西總是這麼的複雜,使用起來可能非常不便,需要安裝Excel,對於伺服器,有時候還需要為配置IIS許可權。折騰人,看到很多人在群裡面使用這個東西,出現各種抓

原創.NET讀寫Excel工具Spire.Xls使用(2)Excel檔案的控制

  前一篇文章:“.NET操作Excel利器Spire.Xls使用(1)入門介紹 ”給大家介紹了Spire.XLS的基本功能和一些比較。這篇文章將重點介紹C#操作Excel檔案時,對Excel檔案本身的相關設定,全域性控制的內容。因為這也是C#讀寫Excel檔案時經常碰到的文章,也是我在使用過程中的一

原創.NET讀寫Excel工具Spire.Xls使用(4)對資料操作與控制

  Spire.Office for .NET是E-iceblue開發的一種企業級.NET Office編輯的軟體集合,包括Spire.Doc,Spire XLS,Spire.PDF,Spire.BarCode等等。.NET平臺的開發人員可以使用Spire.Office for .NET輕鬆的操作含有

原創.NET平臺機器學習元件-Infer.NET連載(一)介紹

關於本文件的說明   本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。   歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。   本人正在研究基於Infer.NET元件,並

原創.NET平臺機器學習元件-Infer.NET連載(二)貝葉斯分類器

關於本文件的說明   本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。   歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。   本人正在研究基於Infer.NET元件,並