国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

System.Diagnostics命名空間里的Debug類和Trace類的用途

2024-07-21 02:17:22
字體:
供稿:網(wǎng)友


摘要

在 .net 類庫中有一個 system.diagnostics 命名空間,該命名空間提供了一些與系統(tǒng)進程、事件日志、和性能計數(shù)器進行交互的類庫。當中包括了兩個對開發(fā)人員而言十分有用的類——debug類和trace類。本文介紹了這兩個類的一些基本用途,旨在提高廣大開發(fā)人員的開發(fā)效率。
使用debug類來幫助調(diào)試

調(diào)試程序?qū)γ總€程序員來說是家常便飯。可是我們會經(jīng)常遇到一些情況讓我們頭疼,例如:

當我們在開發(fā)一個界面控件的時候,簡單的設(shè)斷點會增加paint事件的響應(yīng)次數(shù),而造成的環(huán)境參數(shù)改變。
斷點設(shè)多了,程序常常停在正常運行的地方;這樣一來,調(diào)試一個錯誤要花費大量時間去尋找錯誤。
這時,我們就需要利用system.diagnostics.debug類來幫助我們調(diào)試。我們可以通過調(diào)用debug.writeline(string message)函數(shù),將我們所關(guān)心的信息打印在visual studio ide的output窗口中。也可以利用debug.assert(bool condition)來讓程序停在錯誤的地方,并且顯示call stack。

debug類中所有函數(shù)的調(diào)用都不會在release版本里有效。也就是說,我們通過這種方法所加的代碼可以僅用于調(diào)試;在發(fā)布的時候無需刪任何代碼,就可以給用戶一個沒有調(diào)試指令的程序了。

下面的這個例子演示了這兩個函數(shù)來幫助調(diào)試的方法:

1、 新建一個visual studio c# project,采用默認的項目名。

2、 往form1上拖一個label,并采用其缺省id。

3、 在form1.cs中的form1類中添加下面的函數(shù)代碼:

private int time=0;
protected override void onpaint(painteventargs e)
{
time++;
this.label1.text="onpain called "+time.tostring()+" times.";
}

protected override void onresize(eventargs e)
{
system.diagnostics.debug.assert(this.width>200,"width should be larger than 200.");
system.diagnostics.debug.writeline(size.tostring());
}

4、 編譯并運行項目的debug版本。

5、 切換visual studio .net ide到output窗口。

6、 切換到剛才的程序,改變主窗口的大小,您可以在ide中看到form1窗口的實時大小,并在form1上看到onpaint被調(diào)用的次數(shù)。當窗口的寬度小于等于200個像素的時候,系統(tǒng)會彈出一個assertion fail的對話框。里面顯示了當前程序的call stack。如果您在onpaint中設(shè)置了斷點,想要調(diào)試程序的話,那么您會進入一個死循環(huán),直到您停止調(diào)試。

debug類和trace類的區(qū)別

您一定發(fā)現(xiàn)了在system.diagnostics命名空間中還有一個名為trace的類。它的函數(shù)功能和debug非常相似。為什么要有這樣兩個功能類似的類呢?

原因是這樣的,debug類里所提供的函數(shù)僅在編譯時帶#debug宏參數(shù)才奏效,一旦到了release版本中,這些函數(shù)都會被忽略。也就是說debug類的功能僅在程序員開發(fā)的時候能用。而trace則不同,它能在release版本的程序中也被運行,這樣程序員就可以在release版本的程序中添加一些debug類提供的功能了。

使用trace類來做程序日志

接下來的問題就是:我們程序員能利用trace類的功能做些什么呢?我們可以用它來做程序的日志。

1、 打開剛剛的project。

2、 用下面的代碼覆蓋剛才第2步的代碼:

private void calculate()
{
int a=1,b=1;
try
{
system.random r = new random();
while (true)
{
a=(int)(r.nextdouble()*10);
b=(int)(r.nextdouble()*10);
system.diagnostics.trace.writeline(system.datetime.now.tostring()+": "+
a.tostring()+"/"+b.tostring()+"="+(a/b).tostring());
}
}
catch (exception ex)
{
system.diagnostics.trace.writeline(system.datetime.now.tostring()+": "+a.tostring()+
"/"+b.tostring()+"="+" error: "+ex.message);
messagebox.show(ex.message);
}
}

3、 在構(gòu)造函數(shù)form1()的最后添加下面的代碼,將trace的輸出重定向到app.log文件中:

system.diagnostics.trace.listeners.clear();
system.diagnostics.trace.autoflush=true;
system.diagnostics.trace.listeners.add(new system.diagnostics.textwritertracelistener("app.log"));

4、 拖一個按鈕到該form上,雙擊按鈕,在button1_click函數(shù)中添加如下代碼:

calculate();
application.exit();

5、 運行該程序的release版本,點擊添加的按鈕,程序便開始執(zhí)行一位隨機數(shù)除法。由于是隨機數(shù),可能會出現(xiàn)出數(shù)為0的情況,這樣程序就會拋出exception,這是程序會自動中止。

6、 在該程序所在的目錄里您可以發(fā)現(xiàn)出現(xiàn)了一個新的文件app.log,里面記錄了各個時刻的運算紀錄,并把exception紀錄在日志中。

小結(jié)

利用 system.diagnostics.debug 類和 system.diagnostics.trace 類可以幫助程序員方便地進行調(diào)試程序并檢測程序運行情況。

debug類的所有調(diào)用僅在程序的debug版本中有效;而trace類的調(diào)用能在release版本和debug版本中都有效。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵溪市| 当雄县| 温宿县| 吉林省| 武冈市| 灵寿县| 丰镇市| 罗田县| 河津市| 前郭尔| 奈曼旗| 云安县| 奉贤区| 滕州市| 东乌珠穆沁旗| 贵南县| 水城县| 城口县| 霍林郭勒市| 安仁县| 静宁县| 浑源县| 合川市| 高邑县| 手机| 鄂温| 敖汉旗| 兴和县| 太谷县| 长武县| 奉新县| 浙江省| 永济市| 长顺县| 保定市| 鄂伦春自治旗| 江达县| 桂东县| 固始县| 达拉特旗| 玛多县|