Dot Net的調試 - 3

來源:互聯網
上載者:User
調試



實際上調試和跟蹤用得很普遍。Debug類中的方法有相同的名字的方法,這些方法實現了調試的功能。不同之處是在發布版本配置中是禁止使用的(這意味著不能產生二進位代碼調用這些代碼)。調試輸出也可以在設定檔設定,請看下面:

<confuration>

<system.diagnostics>

<debug autoflush = “true” indentsize = “7” / >

</system.diagnostics>

</confuration>

備忘:調試的聲明和文法和跟蹤很類似。不同之處,就是把有Trace的地方替換為Debug



設定調試開關

最後討論的主題是Switch。Switch是有一些狀態的對象。可以在設定檔或者編程的時候改變狀態。Switch讓你建立可配置的調試跟蹤代碼。最好瞭解Switch的方法是寫一個段簡單代碼,如下:

using System;

using System.Diagnostics;



namespace Switching

{

class SampleClass

{

//Create a Switch. It is initialized by an externally specified value

static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

static public void SampleMethod()

{

//The first message is written if the switch state is set to TraceError

if(generalSwitch.TraceError)

console.WriteLine(“TraceError message”);

//The second message is written if the switch state is set to TraceVerbose

if (generalSwitch.TraceVerbose)

Console.WriteLine(“TraceVerbose message”);

//The third message is writeen if the switch state is set to TraceWarning

if (generalSwitch.TraceWarning)

Console.WriteLine(“TreaceWarning message”);

//The fourth message is written if the switch state is set to TraceInfo

if(generalSwitch.TraceInfo)

Console.WriteLine(“TraceInfo Message”);

}

public static void Main(string[] args)

{

//calls the sampleMethod method

SampleMethod();

}

}

}



有幾個switch類:TraceSwitch和BooleanSwitch。這個例子中我們用使用TraceSwitch依照他們的狀態建立輸出資訊。Switch狀態由TraceErrror,TraceInfo,TraceVerbose和TraceWarning屬性檢查。這些屬性檢查switch狀態和如果trace層級等於或大於相應的常量,那麼將返回true。例如,當這個層級是2或者更大那麼TraceWarning是true,下面表格是傳回值:

TraceErroe
1

TraceWarning
2

TraceInfo
3

TraceVerbose
4


但是,正如我們已經說的,switch的狀態可以在代碼中修改,做個修改代碼的範例:

using System;

using System.Diagnostics;



namespace Switching

{

class SampleClass

{

//Create a Switch. It is initialized by an externally specified value

static TraceSwitch generalSwitch = new TraceSwitch(“CoolSwitch”, “Global Scope”);

static public void SampleMethod()

{

//The first message is written if the switch state is set to TraceError

if(generalSwitch.TraceError)

console.WriteLine(“TraceError message”);

//The second message is written if the switch state is set to TraceVerbose

if (generalSwitch.TraceVerbose)

Console.WriteLine(“TraceVerbose message”);

//The third message is writeen if the switch state is set to TraceWarning

if (generalSwitch.TraceWarning)

Console.WriteLine(“TreaceWarning message”);

//The fourth message is written if the switch state is set to TraceInfo

if(generalSwitch.TraceInfo)

Console.WriteLine(“TraceInfo Message”);

}

public static void Main(string[] args)

{

Console.WriteLine(“Before manual level set\n”);

SampleMethod();

GeneralSwitch.Level = TraceLevel.Warning;

SampleMethod();

}

}

運行程式,包含以下資訊:



Before manual level set



TraceError Message

TraceWarning message

TraceInfo message



After manual level set



TraceError Message

TraceWarning Message



這些展示了改變trace switch層次。



計算效能

這部分我們將告訴你調試的花費時間。事實上,調試對於商業邏輯不起作用。但是調試代碼需要花費時間。我們將計算應用程式中輸出資訊的花費時間。當你測試一個是建要求嚴格的應用時間,測量就很重要。看下面的代碼:

using system;

using system.Diagnostics;



namespace DebugDemo

{

class PrimeNumberDetector

{

public static bool IsPrime(int n)

{

int upperbound = (int)Math.Sqrt(n);

for (int I = 2; I <= upperbound; I++)

{

Debug.WriteLine(“Processing number” + n + “, Testing with “ + i);

If((n%i) == 0)

{

Debug.WriteLine(“FAILED”);

Return false;

}

}

}



public Application

{

[STAThread]

static void Main(string[] args)

{

for(int i = 2; i < 10000;i++)

if (PrimeNumberDetector.IsPrime(i))

Console.WriteLine(“{0} is prime number” , i);

}

}

}

程式測試2到1000個整數和輸出素數。調試的目的是測試每一個輸出數字,不管是否是素數。如果數字不是素數,那麼輸出failed.

對比測量下帶調試和不帶調試的時間:


1
2
3

帶調試功能(hh:mm:ss.ff)
00:00:07.9714624
00:00:07.9414192
00:00:07.9714624

不帶調試功能

(hh:mm:ss.ff)
00:00:05.1273728
00:00:05.5179344
00:00:05.1273728


可以看出調試是昂貴的—例子中花費了64%的執行時間



結論:

文章中描述了調試跟蹤.net程式的一般方法。當然還有一些其他問題,如,條件編譯我們沒有做。想學到更多的東西,可以看msdn。我們希望這篇文章協助你掌握調試跟蹤.net程式的技術。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。