<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      DotNet斷言跟蹤

      2009-10-18 23:39  空逸云  閱讀(351)  評論(0)    收藏  舉報

      這是很久之前的一篇翻譯.原文我也不知道在哪?原名翻譯<<DotNet的調(diào)試>>.不過我覺得<<DotNet斷言跟蹤>>更適合它

      Debug是整個軟件開發(fā)過程中最痛苦的部分之一。我們不想說發(fā)現(xiàn)一個小bug是多么的困難-你可能已經(jīng)都知道。軟件中bug的數(shù)量是隨著軟件的復(fù)雜程度和經(jīng)常沒有及時修正bug而增長的。這些bug和軟件的負(fù)責(zé)程度互相影響,使工程變得更加復(fù)雜。所以我們不斷的監(jiān)控和修改bug

      最好的辦法是執(zhí)行單元測試的時候來修正bug,當(dāng)軟件出現(xiàn)問題的時候,軟件不會告訴我們哪里出現(xiàn)錯誤,為什么出現(xiàn)錯誤,我們的任務(wù)就是跟蹤進(jìn)程去解決他們。

      這篇文章我們就是想告訴你怎樣利用DotNet FrameWork來調(diào)試和跟蹤讓這個處理過程變得簡單。我們將簡要的告訴你怎么樣有效的使用他們,并用結(jié)合例子說明。

      跟蹤

      在這篇文章中首先要討論的調(diào)試的策略是跟蹤。跟蹤是很強(qiáng)大的技術(shù),因?yàn)樗试S你看到應(yīng)用程序的整個在運(yùn)行期的整個行為,分析他是最有效的,盡管他不能提供需要的信息。

      DotNetSystem.Diagnostics名字空間中提供了跟蹤的功能,正確的說是Trace Class

      Trace是個靜態(tài)類(這意味著所有的成員是靜態(tài)的,你不需要初始化他來獲得它的功能)

      .產(chǎn)生一個斷言(有條件或沒有)

      .根據(jù)提供的條件輸出跟蹤信息

      .格式化跟蹤輸出信息

      讓我們從簡要的成員方法開始研究:

      public static void Assert(bool)

      public static void Assert(bool,string)

      public static void Assert(bool,string,string)

       

      Assert方法顯示一個失敗信息(應(yīng)用程序失敗的時候顯示信息,允許用戶中斷執(zhí)行,忽略錯誤或者重新運(yùn)行引起錯誤的代碼),如果條件是false,兩個重載函數(shù)允許顯示指定的自定義一個或兩個跟著的信息。(這些信息通過string參數(shù)設(shè)置,這么做允許開發(fā)者顯示額外的斷言失敗的信息)

      //Asertion Demo

      //

      //Purpose: To Demonstrate Results of Different Assert Method Calls

      using System;

      using System.Diagnostics

      namespace Assertion

      {

              class Application

      {

              [STAThread]

              static voidMain(string[] args)

              {

                        //Simple assertion. No additional message

                       Trace.Assert(false);

              }

      }

      }

      程序?qū)@示下面的消息對話框:

      正如你看到的,僅僅是顯示異常信息。沒有顯示任何上下文信息,所以我們不能看到失敗的原因。下面,應(yīng)用程序調(diào)用Assert方法用它的一個屬性:

      //Asertion Demo

      //

      //Purpose: To Demonstrate Results of Different Assert Method Calls

      using System;

      using System.Diagnostics

      namespace Assertion

      {

              class Application

      {

              [STAThread]

              static voidMain(string[] args)

              {

                        //Simple assertion. No additional message

                       Trace.Assert(false,”Simple assertion Message”);

              }

      }

      }

      這個程序顯示了一個更多信息的對話框。可以看到我們能提供的關(guān)于失敗原因的信息。

      調(diào)用有兩個信息的Assert方法,組成更加詳細(xì)的斷言:

      //Asertion Demo

      //

      //Purpose: To Demonstrate Results of Different Assert Method Calls

      using System;

      using System.Diagnostics

      namespace Assertion

      {

              class Application

      {

              [STAThread]

              static voidMain(string[] args)

              {

                        //Simple assertion. No additional message

                       Trace.Assert(false,”Simple assertion Message””This message just an example.In real application you can provite detailed information here’);

              }

      }

      }

      你現(xiàn)在看到更加詳細(xì)的信息:

      事實(shí)上,當(dāng)檢查重要條件,比如數(shù)據(jù)正確性等情況的時候才用這種方法。下邊是他最常用的例子:public void StoreObject(PersistentObject obj)

      {

            Trace.Assert(obj != null, "Cannot store null object);

      }

      這個方法檢查object對象不是null的時候被存儲。當(dāng)程序失敗的時候是產(chǎn)生異常的最好時間,但這不是必要條件。例如,如果這個方法保存了一些重要的程序數(shù)據(jù),斷言是完美的選擇。

      備注:調(diào)試跟蹤是有用的,如果最終發(fā)行版本中包含了斷言信息對用戶來說是無法忍受的。下面的竅門可以幫助你控制跟蹤開關(guān)。

       

      如果你手工編譯工程(比如命令行編譯),缺省顯示跟蹤信息。如果在c#中用跟蹤功能,當(dāng)你編譯代碼的時候,要加/d:Trace標(biāo)志來編譯命令行,或者你可以簡單的加入#define Trace到文件最頂端。

      比如,下面的小程序:

      using system;

      using System.Diagnostics;

      namespace TraceShow

      {

            class calss1

      {

            ///<summary>

            ///The main entry point for the application

            ///</summary>

            [STAThread]

            static voidMain(string[] args)

            {

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

                   Trace.Write(“Hey,this is a trace message\n”, “SIMPLE MESSAGE”);

            }

      }

      }

      如果在命令行編譯,你將看不到任何信息,除非你加上/d:Trace或者加入#define Trace到文件頂部。

      當(dāng)你在visual c#中編譯程序這種情形將改變,visual c#中默認(rèn)是可用的,結(jié)論是你將看到跟蹤信息。關(guān)閉調(diào)試功能,瀏覽工程屬性(可以在解決方案瀏覽器重或者view->property菜單項(xiàng)。在這個屬性頁面對話框中,發(fā)現(xiàn)條件編譯常量(在configuration properties文件夾下,build pane中這個選項(xiàng)是鎖定狀態(tài)),去掉Trace選項(xiàng)):

         圖

      public static void Fail(string)

      public static void Fail(string, string)

      Fail方法產(chǎn)生一個無條件斷言。它的有些行為有點(diǎn)像Assert方法,但是他不需要任何處理?xiàng)l件。

      帶有簡單條件的失敗條件不能被選中那么用這個方法。下邊的例子是這種異常的處理情形:

      try

      {

              throw new Exception(“Sample Exception”);

      }

      catch(Exception Ex)

      {

              Trace.Fail(“Exception caught”, Ex.Message);

      }

       

      pubic static void Write(object)

      public static void Write(string)

      public static void Write(object, string)

      public static void Write(string,string)

       

      Trace類可以在不產(chǎn)生任何條件的情況下寫入跟蹤信息。比如信息輸出到作為跟蹤信息的接收者的設(shè)備中。用write方法執(zhí)行輸出。

      Write方法可以建立作為對象或者字符串的描繪信息。以前的案例中,object.ToString被呼叫執(zhí)行。有其他三個方法可以執(zhí)行類似的行為:writeline輸出行,writeif-條件信息,writelineif輸出一行條件信息。

      Write方法的第二個參數(shù)指定將要寫入信息前的分類(比如一個字符串)

      輸出被注冊為偵聽器。偵聽器是可以輸出跟蹤信息到一些設(shè)備的對象。注意AssertFail方法經(jīng)常輸出錯誤信息到窗體或者控制臺,不管那個偵聽器被選中。這類對象必須繼承TraceListener類,他有以下重要的方法:

      public virtual void Fail(string)

      public virtual void Fail(string,string)

       

      public virtual void Flush(string)

       

      public virtual void Write(object)

      public abstract void Write(string)

      public virtual void Write(object,string)

      public virtual void Write(string,string)

       

      public virtual void WriteLine(object)

      public Virtual void WriteLine(string)

      public virtual void writeLine(object,string)

      public virtual void WriteLine(string,string)

      --------------------------------------------------------------------------------------------

      Fail方法不能阻止應(yīng)用程序運(yùn)行,他們僅僅輸出錯誤信息。WriteWriteLine方法寫入一個消息。他們不同之處僅僅在于后者輸出執(zhí)行后再輸出一行。最后,Flush方法刷新緩存。Flush方法對跟蹤信息輸出的設(shè)備有作用(例如,流)。你可以使用自動刷新每個信息后都自動刷新偵聽者。可以在配置文件里面配置:

      <configuration>

             <stream.diagnostics>

                        <trace autoflush = “false” />

              </stream.diagnostics>

      </configuration>

       

      正如你看到的,如果你創(chuàng)建自己的傾聽者,需要至少實(shí)現(xiàn)write(string)writeline(string)方法(這些方法是抽象方法)。

      微軟提供三種跟蹤偵聽者:DefaultTraceListener,EventLogTraceListenerTextWriteTraceLister.。第一個偵聽者有缺省的方法(如果應(yīng)用程序在命令行的環(huán)境下運(yùn)行,那么輸出信息到控制臺。如果應(yīng)用程序在調(diào)試情況下,輸出到窗口)。第二個偵聽者輸出信息到指定事件日志中(基于nt技術(shù)—winnt,2k,xp或者.net)。第三個傾聽者輸出文本到流中。

      活動傾聽者列表可以在編程中設(shè)置或者在配置文件中。缺省包括DefaultTraceListener.

      編程改變活動傾聽者列表,要管理傾聽者集合(通過添加和刪除方法)。配置文件中管理傾聽者,你要用下邊的語法:

      <configuration>

      <system.diagnostics>

              <trace autoflust=”false” indentsize = 4>

                        <listeners>

      <add name=”myListener” type=”System.Dianostics.TextWriterTraceListener, system”

      initializeData = “c:\MyListener.log”/>

      <remove type = “System.Diagnostics.DefaultTraceListener,System”/>

      </listeners>

      </trace>

      </system.dianostics>

      </configuration>

      InitializeDat參數(shù)是傳遞到構(gòu)造器的的字符串參數(shù)(指定EventLogTraceListener偵聽者事件日志)。

      偵聽者很熟悉創(chuàng)建應(yīng)用程序使用偵聽者輸出跟蹤信息。代碼很簡單:

      //Trace listeners demo

      //

      //purpose:To demonstrate how to use listeners

      using System;

      using System.Diagnostics;

       

      namespace Assertion

      {

              class Application

              {

                        [STAThread]

                        static voidMain(string[] args)

                        {

                                 Trace.WriteLine(“Calling WriteLine method”, “Trace Listeners demo”);

                                 Trace.Flush();

                        }

              }

      }

       

      這些代碼還不夠,我們必須創(chuàng)建一個配置文件來設(shè)置偵聽者:

      <configuration>

      <system.diagnostics>

         <trace autoflush="false" indentsize="4">

      <listeners>

           <remove type="System.Diagnostics.DefaultTraceListener"/>

           <add name="myListener" type="System.Diagnostics.TextWriterTraceListener"

                 initializeData="myListener.log" />

          <add name="myListenerEventLog" type="System.Diagnostics.EventLogTraceListener"

                initializeData="Application" />

      </listeners>

         </trace>

      </system.diagnostics>

      </configuration>

      這個配置文件刪除了缺省偵聽者加入兩個自定義偵聽者:第一個輸出信息到文本文件,第二個輸出到事件日志中。對于第一個偵聽者initializeData屬性指定輸出數(shù)據(jù)的文件,第二偵聽者記錄事件到事件日志。

      運(yùn)行程序。檢查第一個偵聽者,可以看到myListener.log文件,它包含以下信息:Tracing listeners Demo:Calling WriteLine Method

      PS:事實(shí)上.很多圖片的鏈接都失效了.原作者也找不到了.我也不補(bǔ)上圖片了.這篇文章應(yīng)該很容易看懂.例子也很簡單.可以參考MSDN上有關(guān)這方面的資料跟蹤偵聽器 

      主站蜘蛛池模板: аⅴ天堂国产最新版在线中文| 国产精品视频一区二区不卡| 无码A级毛片免费视频下载| 99精品免费久久久久久久久日本| 久久精品亚洲精品国产区| 人成午夜免费大片| 人人妻人人插视频| 自拍偷拍一区二区三区四| 99热精品毛片全部国产无缓冲| 彭水| 亚洲精品国产精品国在线| 麻豆国产传媒精品视频| 草裙社区精品视频播放| 久草热大美女黄色片免费看| 国产综合视频一区二区三区 | 丰满人妻熟妇乱又伦精品劲| 久久精品一本到99热免费| WWW丫丫国产成人精品| 国产亚洲精品第一综合| 国产av亚洲一区二区| 久热中文字幕在线| 少妇真人直播免费视频| 青春草公开在线视频日韩| 国产福利精品一区二区| 熟女在线视频一区二区三区| 国产日产欧产美韩系列麻豆| 国产丰满乱子伦无码专区| 国产乱老熟女乱老熟女视频| 色777狠狠狠综合| 亚洲AV无码久久精品日韩| 亚洲中文字幕五月五月婷| 日韩av在线不卡一区二区三区| 亚洲精品一区二区美女| 国产肥妇一区二区熟女精品| 中文字幕乱码亚洲无线三区| 精品乱人码一区二区二区| 老少配老妇老熟女中文普通话| 亚洲中文字幕国产综合| 久久香蕉国产线看观看猫咪av| 国产精品美女久久久久久麻豆| 新化县|