日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net程序调试与追踪的一些方法

發(fā)布時(shí)間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net程序调试与追踪的一些方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

作為一個(gè).net開發(fā)工程師,不管是在寫桌面程序、服務(wù)程序或web程序,在開發(fā)階段,我們必須非常熟悉vs的動態(tài)調(diào)試技能,當(dāng)然web程序可能還需要調(diào)試前端的腳本或樣式,這不在本文的討論范圍。本文主要介紹vs的動態(tài)調(diào)試基本知識,以及介紹如何追蹤已發(fā)布的程序的調(diào)試日志或技能。

開發(fā)階段

本階段主要以動態(tài)調(diào)試為主,調(diào)試的利器當(dāng)然是vs。

動態(tài)調(diào)試步驟:

1、擁有程序的代碼和pdb文件;

2、在你要觀察邏輯代碼行號下斷點(diǎn);

3、vs->調(diào)試->開始調(diào)試(你可能需要條件來觸發(fā)讓程序執(zhí)行到你要的邏輯代碼行號);

4、對于已運(yùn)行的程序,你也可以vs->調(diào)試->附加到進(jìn)程 來完成啟動調(diào)試,如果已運(yùn)行的程序是服務(wù)進(jìn)程(非桌面進(jìn)程),在附加到進(jìn)程對話框要勾選上“顯示所有用戶的進(jìn)程”;

斷點(diǎn)的條件過濾

在動態(tài)調(diào)試中,如果在多線程環(huán)境,一個(gè)斷點(diǎn)斷到之后,如果使用“逐語句”到下語句的話,斷點(diǎn)又會馬上被斷到,造成跟蹤上下文很不方便;還一種情況,在循環(huán)體里下斷,但是只想跟蹤符合一定條件的點(diǎn)。這些時(shí)候,應(yīng)使用條件斷點(diǎn),在某代碼行號下斷,然后右鍵左邊紅色斷點(diǎn)實(shí)圈,彈出的菜單里可以給斷點(diǎn)設(shè)置條件,設(shè)置條件之后的斷點(diǎn),叫條件斷點(diǎn),vs顯示為紅色的虛圈。

?

生產(chǎn)階段

本階段以追蹤為主,追蹤應(yīng)用程序的日志文件、調(diào)試信息輸出和異常等,不得以的情況下,可以使用遠(yuǎn)程動態(tài)調(diào)試來調(diào)試。

日志文件

可能你第一時(shí)間就想到log4net,沒錯(cuò),它可以將一些調(diào)試信息和異常信息寫入文件或db,很方便查詢。除此之外,我們應(yīng)該還要了解?Exceptionless ,它的強(qiáng)大之處在于更完善的異常上下文內(nèi)容收集、異常分類顯示與匯總,在Exceptionless 查看異常信息,幾乎就可以靜態(tài)分析出異常的原因從而直接修改代碼。

?

?

收集調(diào)試信息

由于性能的原因,日志文件里,我們一般只記錄重要的和異常的內(nèi)容,不太重要的產(chǎn)生又頻繁的內(nèi)容,在控制臺的時(shí)候,我們可以使用Console.WriteXXX將這些內(nèi)容實(shí)時(shí)顯示。實(shí)際上,只要調(diào)用?System.Diagnostics.Debugger的Log方法,這個(gè)方法輸出的內(nèi)容,在不調(diào)試的情況下,也可以使用一些工具進(jìn)行捕獲這些輸出內(nèi)容,以下為提供的兩個(gè)收集工具。

1、使用DebugViewer工具進(jìn)行收集

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

?

2、使用debugview工具進(jìn)行收集

?

收集Console.WriteXXX的內(nèi)容

在寫控制臺程序的時(shí)候,Console.WriteXXX能方便我們追蹤,但在非控制臺程序(比如服務(wù)進(jìn)程、windows桌面應(yīng)用和web應(yīng)用),這些Console.WriteXXX實(shí)際上是不產(chǎn)生任何輸出的?,F(xiàn)在我們的目標(biāo)是,在非控制臺類型的應(yīng)用,只要調(diào)用了Console.WriteXXX,也能讓收集工具能收集到這些輸出信息。

1、在程序初始化的時(shí)候,替換Console靜態(tài)類的Out屬性,Console.SetOut( debugOut )

2、實(shí)現(xiàn)自己的DebugOut,將Write的內(nèi)容輸出到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);}}

使用這個(gè)辦法,我可以做到一個(gè)程序,當(dāng)以控制臺服務(wù)時(shí),就輸出到控制到,當(dāng)以服務(wù)進(jìn)程運(yùn)行之后,調(diào)試信息可以被收集工具收到到,而我們的代碼還是調(diào)用Console.WriteXXX。

?

遠(yuǎn)程動態(tài)調(diào)試

希望沒走到這步就可以解決問題,遠(yuǎn)程調(diào)試的要求還是比較高的:

1、遠(yuǎn)程的程序必須帶pdb文件,最好與本機(jī)的代碼是完全一樣的;

2、vs附帶的“遠(yuǎn)程調(diào)試工具”復(fù)制到遠(yuǎn)程機(jī)器上,根據(jù)x86或x64系統(tǒng)運(yùn)行對應(yīng)的調(diào)試服務(wù)端;

3、vs->調(diào)試->附加到進(jìn)程,傳輸為“遠(yuǎn)程(遠(yuǎn)程無身份驗(yàn)證)”,“限定符”為遠(yuǎn)程機(jī)器的ip或域名;

?

結(jié)束

以上是個(gè)人現(xiàn)在常用的調(diào)試與追蹤方法,你也可以把你的其它好點(diǎn)子分享分享。

原文地址:http://www.cnblogs.com/kewei/p/7096905.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的.Net程序调试与追踪的一些方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。