.Net程式調試與追蹤的一些方法

來源:互聯網
上載者:User

標籤:color   問題   cli   資訊   步驟   對話   最好   寫入檔案   案頭   

前言

作為一個.net開發工程師,不管是在寫傳統型程式、服務程式或web程式,在開發階段,我們必須非常熟悉vs的動態調試技能,當然web程式可能還需要調試前端的指令碼或樣式,這不在本文的討論範圍。本文主要介紹vs的動態調試基本知識,以及介紹如何追蹤發行的程式的調試日誌或技能。

開發階段

本階段主要以動態調試為主,調試的利器當然是vs。

動態調試步驟:

1、擁有程式的代碼和pdb檔案;

2、在你要觀察邏輯程式碼號下斷點;

3、vs->調試->開始調試(你可能需要條件來觸發讓程式執行到你要的邏輯程式碼號);

4、對於已啟動並執行程式,你也可以vs->調試->附加到進程 來完成啟動調試,如果已啟動並執行程式是服務進程(非案頭進程),在附加到進程對話方塊要勾選上“顯示所有使用者的進程”;

斷點的條件過濾

在動態調試中,如果在多線程環境,一個斷點斷到之後,如果使用“逐語句”到下語句的話,斷點又會馬上被斷到,造成跟蹤上下文很不方便;還一種情況,在迴圈體裡下斷,但是只想跟蹤符合一定條件的點。這些時候,應使用條件斷點,在某程式碼號下斷,然後右鍵左邊紅色斷點實圈,彈出的菜單裡可以給斷點設定條件,設定條件之後的斷點,叫條件斷點,vs顯示為紅色的虛圈。

 

生產階段

本階段以追蹤為主,追蹤應用程式的記錄檔、調試資訊輸出和異常等,不得以的情況下,可以使用遠程動態調試來調試。

記錄檔

可能你第一時間就想到log4net,沒錯,它可以將一些調試資訊和異常資訊寫入檔案或db,很方便查詢。除此之外,我們應該還要瞭解 Exceptionless ,它的強大之處在於更完善的異常上下文內容收集、異常分類顯示與匯總,在Exceptionless 查看異常資訊,幾乎就可以靜態分析出異常的原因從而直接修改代碼。

 

收集調試資訊

由於效能的原因,記錄檔裡,我們一般只記錄重要的和異常的內容,不太重要的產生又頻繁的內容,在控制台的時候,我們可以使用Console.WriteXXX將這些內容即時顯示。實際上,只要調用 System.Diagnostics.Debugger的Log方法,這個方法輸出的內容,在不調試的情況下,也可以使用一些工具進行捕獲這些輸出內容,以下為提供的兩個收集工具。

1、使用DebugViewer工具進行收集

這個工具是我使用.net來編寫的收集程式,UI很好友,已開源託管在github上面了。

 

2、使用debugview工具進行收集

 

收集Console.WriteXXX的內容

在寫控制台程式的時候,Console.WriteXXX能方便我們追蹤,但在非控制台程式(比如服務進程、windows案頭應用和web應用),這些Console.WriteXXX實際上是不產生任何輸出的。現在我們的目標是,在非控制台類型的應用,只要調用了Console.WriteXXX,也能讓收集工具能收集到這些輸出資訊。

1、在程式初始化的時候,替換Console靜態類的Out屬性,Console.SetOut( debugOut )

2、實現自己的DebugOut,將Write的內容輸出到Debugger.Log方法

    public class DebugOut : System.IO.TextWriter    {        public override void Write(char[] buffer, int index, int count)        {            var message = new string(buffer, index, count);            System.Diagnostics.Debugger.Log(0, null, message);        }    }
DebugOut

使用這個辦法,我可以做到一個程式,當以控制台服務時,就輸出到控制到,當以服務進程運行之後,調試資訊可以被收集工具收到到,而我們的代碼還是調用Console.WriteXXX。

 

遠程動態調試

希望沒走到這步就可以解決問題,遠端偵錯的要求還是比較高的:

1、遠端程式必須帶pdb檔案,最好與原生代碼是完全一樣的;

2、vs附帶的“遠端偵錯工具”複製到遠程機器上,根據x86或x64系統運行對應的調試服務端;

3、vs->調試->附加到進程,傳輸為“遠程(遠程無身分識別驗證)”,“限定符”為遠程機器的ip或網域名稱;

 結束

以上是個人現在常用的調試與追蹤方法,你也可以把你的其它好點子分享分享。

 

.Net程式調試與追蹤的一些方法

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.