西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開發(fā)C#.NET → .net中的Debug與Trace的調(diào)試心得

.net中的Debug與Trace的調(diào)試心得

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/5/30 18:58:15字體大小:A-A+

作者:佚名點(diǎn)擊:305次評(píng)論:1次標(biāo)簽: Trace

Acme TraceArtv3.9.8 官方最新版
  • 類型:圖像處理大。2.5M語(yǔ)言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

最近在讀《.NET開發(fā)人員調(diào)試策略》,書倒是不錯(cuò),只是翻譯的比較差。不過(guò)里面介紹的一些調(diào)試的心得還不錯(cuò),有些收獲。

  下面我就總結(jié)下本書中關(guān)于Debug和Trace的一些應(yīng)用,算作一種讀書筆記。

  粗略概括下關(guān)于修改BUG的幾種方法:

通過(guò)調(diào)試器調(diào)試

    顧名思義就是跟蹤源代碼進(jìn)行調(diào)試,微軟還提供了遠(yuǎn)程調(diào)試的功能。通過(guò)源代碼的方式調(diào)試,我們一般會(huì)采用以下的幾種方法:

使用Exception

使用MessageBox。

使用#if Debug .. #endif

使用斷言調(diào)試:其中有Debug.Assert和Trace.Assert兩種,Debug只在Debug模式下有效,Trace則都有效。斷言模式還有個(gè)優(yōu)點(diǎn),可以直接點(diǎn)擊按鈕重試,選擇調(diào)試器進(jìn)行調(diào)試。

當(dāng)然還有通過(guò)堆棧跟蹤或者其他的一些特殊手段等等。

   .net所提供的斷言調(diào)試相當(dāng)強(qiáng)大,建議大家采用該方法。具體應(yīng)用請(qǐng)自行尋找資料。 

   msdn:

      Debug.Assert 方法

      Trace.Assert 方法

通過(guò)日志調(diào)試

   想必大家肯定遇到過(guò),有些BUG在客戶那邊會(huì)出現(xiàn),但是本機(jī)就是模擬不出來(lái)。而客戶要嘛遠(yuǎn)隔萬(wàn)里,要嘛就是不允許安裝遠(yuǎn)程調(diào)試。

   在這種情況下,就可以通過(guò)日志調(diào)試,也就是將一些重要的信息寫到文本中,當(dāng)出現(xiàn)問(wèn)題或者BUG可以通過(guò)查看日志文件來(lái)查找原因。

   記錄日志文件,就是寫文件的操作,可以有很多種方法。

   此處介紹下通過(guò).net提供的偵聽(tīng)器與開關(guān)記錄日志。   

   1.直接創(chuàng)建

1         static void Main(string[] args)
2         {
3             bool someBool = true;
4             Trace.Listeners.Add(new TextWriterTraceListener(@"C:\MyListener.log"));
5             Trace.AutoFlush = true;//每次寫入日志后是否都將其保存到磁盤中
6
7             Trace.WriteLine(DateTime.Now.ToString() + "--Enter function LogTest");
8             Trace.Indent(); //縮進(jìn)+1
9             Trace.WriteLine("This is indented once");
10             Trace.Indent();
11             Trace.WriteLineIf(someBool, "Only written if someBool is true");
12             Trace.Unindent(); //縮進(jìn)-1
13             Trace.Unindent();
14             Trace.WriteLine("Leave function LogTest");
15         }

日志內(nèi)容:

2012-05-30 14:11:41--Enter function LogTest
    This is indented once
        Only written if someBool is true
Leave function LogTest

   2.通過(guò)配置文件創(chuàng)建

App.config

1         static void Main(string[] args)
2         {
3             TraceSwitch ts = new TraceSwitch("MySwitch", "descrption");//開關(guān)
4             Trace.WriteLine(DateTime.Now.ToString() + "--Enter function LogTest");
5             Trace.Indent(); //縮進(jìn)+1
6             Trace.WriteLine("This is indented once");
7             Trace.Indent();
8             Trace.WriteLineIf(ts.TraceInfo, "MySwitch TraceInfo is true!");
9             Trace.Unindent(); //縮進(jìn)-1
10             Trace.Unindent();
11             Trace.WriteLine("Leave function LogTest");
12         }

日志內(nèi)容:

2012-05-30 14:19:43--Enter function LogTest
  This is indented once
    MySwitch TraceInfo is true!
Leave function LogTest

   3.windows事件日志

   通過(guò)Trace或者Debug中的EventLogTraceListener即可寫入事件日志。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)