C#調試心經(續)

作者: Alexis  來源: 博客園  發布時間: 2010-11-08 14:29  閱讀: 2370 次  推薦: 0   原文鏈接   [收藏]  

  由于上篇文章漏了一些比較重要的知識,在此文中補充。

  斷點篇

  命中次數(Hit Counts)

  右擊斷點,可以設置Hit Counts(命中次數),會彈出如下的對話框:

  當條件滿足的時候斷點會被命中(即即將被執行),這個命中次數是斷點被命中的次數。默認是始終break,選項有如下的幾種:始終break;當命中次數達到多少次時break;當命中次數是多少的倍數時break;當命中次數大于等于多少的時候break。

  于是在上篇中的條件也可以這樣實現,設置命中次數等于50的時候break,按F5后,斷點被觸發,此時i=50。

  斷點過濾器

  我們可以限制斷點在特定的處理器和進程中。可以設置機器名、進程id、進程名、線程id、線程名中的某些條件來過濾一些斷點。

  注意:ThreadId需要特別說明一下,ThreadId并不是托管程序中,.NET 框架中System.Threading.Thread.ManagedThreadId,兩者不能等同。簡單來說,ManagedThreadId是線程在CLR中的標識符,而ThreadId卻是線程在操作系統中的標識符。因此ThreadId需要從調試器中的“Threads”窗口中獲取。

  斷點條件

  我們可以設置斷點達到的條件,如下圖,我們設置表達式為i==5(注意是判相等,而不是賦值的等于),按F5,斷點再次被觸發,此時i=50。

  還有一個選項是已經被改變,則里面條件是具體的變量,如我們的代碼如下:

 
private void ConditionDebug()
{

int hitCount = 0;
for (int i = 0; i < 100; i++)
{

if (i==49)
{
hitCount
= 1;
}
}
Console.Write(
"Hit Count={0}", hitCount);
}

  我們在代碼里如果i==49,就將hitCount的值改變,同時設置斷點的條件為:

  則當斷點再次被觸發的時候此時i=50。這個通常被用在找變量的時在什么時候發生改變。

  斷點的位置

  可以設置斷點的位置,如下圖,設置程序到達那個文件的第幾行第幾個字符時觸發斷點。

  斷點觸發時

  我們可以設置斷點到達時做一些其他的事情,如打印消息,運行一個宏。

  自定義調用堆棧

  堆棧跟蹤時vs一步步執行你的程序是對當前的方法調用繼承關系的直觀顯示。在調試程序時,我們會經過一個又一個方法,包括方法的嵌套調用。堆棧跟蹤會對這當中的每一層方法作出記錄。選擇“調試-->窗口-->調用堆棧”,或者是快捷鍵Ctrl+Alt+C就可以看到當前的堆棧跟蹤狀態。這里會將每個方法單獨顯示為一行,并且帶有行號和參數值。每一個新的方法調用被稱為堆棧幀。

  堆棧跟蹤是廣為人知的調試工具,它的優點在于你可以雙擊任意一行跳轉到程序中該層調用方法的代碼。于是你可以看到程序是如何執行到這一位置的,同時可以看到方法接受的參數值。并且可以使用Ctrl+C將一個或者全部堆棧幀復制到剪貼板,并將這個方法的調用信息發送給工作伙伴。

  項目屬性中的Debug選項卡

  如果你的項目是Console項目(控制臺應用程序)或者是WinForm項目,則右擊項目解決方案,選擇屬性,會出來如下的項目屬性窗體。 

  我們可以設置“啟動動作”、“啟動選項”和“是否啟用調試”。

  Start Action有三個選擇項:

  Start Project:默認選項,設置為啟動項目。

  Start external program:調試的時候啟動內部程序。

  Start browser with URL:調試的時候打開URL地址。

  使用Trace.axd調試ASP.NET

  在以前asp時候,我們為了查看某個變量的值,通常會使用Response.Write方法。可能現在許多ASP.NET程序員也習慣在后臺使用Response.Write方法將變量的值寫出來,其實微軟提供了很好的調試工具,即Trace.axd。它的功能主要是:配置 ASP.NET 代碼跟蹤服務以控制如何收集、存儲和顯示跟蹤結果。

  關鍵的幾個選項:

  1、localOnly 默認為false。這個很好理解。如果為true,只在本地輸出跟蹤信息。

  2、enabled 是否啟用跟蹤。

  3、pageOutput  指定在每一頁的結尾是否呈現跟蹤輸出。如果是 false ,則只能通過跟蹤實用工具訪問跟蹤輸出。

  4、requestLimit  指定在服務器上存儲的跟蹤請求的數目。最大為10000,默認為10

  5、traceMode  指定顯示跟蹤信息的順序。SortByCategory或 SortByTime(默認)

  關于更多可以參考

  http://msdn.microsoft.com/zh-cn/library/6915t83k%28VS.80%29.aspx

  下面以一個小Demo來說明怎么使用Trace.axd來調試ASP.NET

  1、建立一個Web項目,取名為WebTraceTest

  2、編輯web.config文件,添加trace節點(在)

  內容如下:

 
<trace enabled="true" localOnly="true"
pageOutput="true"
requestLimit="15"
mostRecent="true" />

  3、新建一個頁面,取名為Test.aspx,在里面增加一個文本框和一個按鈕(都是服務器端的控件)。

  按下F5,開始調試,會發現出現如下界面:

  5、在文本框中輸入文字,如Alexis,點擊按鈕,會發現Form Collection中會有詳細的信息,如下:

  說明:使用Trace.axd我們可以獲得以下信息:

  Request Details:請求的詳細信息

  Trace Information:跟蹤信息

  Control Tree:控件樹

  Session State:會話狀態

  Application State:應用程序狀態

  Request Cookies Collection:請求Cookie集合

  Response Cookies Collection:響應Cookie集合

  Headers Collection:標頭集合

  Response Headers Collection:響應標頭集合

  Form Collection:窗體集合

  Querystring Collection:QueryString集合(即Url中?后面的字符串的信息)

  Server Variables:服務器變量

  將Visual Studio與一個運行中的進程連接

  當你按下F5對程序開始調試時,VS.NET會對項目進行生成(如果有必要的話)并以調試模式啟動程序。也就是說,只要項目位于debug版本的程序集中,VS.NET就與運行得程序之間建立了連接,以便對斷點等與調試相關的方法作出反應。

  不過有些時候,我們需要或者想要對正在運行得Visual Studio之外啟動的進程進行調試。當進程位于debug版本的程序集中,這是可以做到的。

  1、選擇“工具—>調試進程”列出所有正在運行得程序,如下圖:

  2、選擇自己感興趣的進程,點擊連接,此時Visual Studio自動切換到了調試模式。

  3、打開Progress窗口,發現我們剛剛選擇的進程在列表中,如下圖: 

  這一技巧可以讓你對Windows服務進程進行調試。編寫Windows服務進程時,你無法按F5啟動調試,因為它們必須先通過管理工具安裝后啟動才能運行。如果你在調試模式下生成并安裝服務程序,就可以使用這一技巧進行調試。

  而且你可以對SQL存儲過程使用同樣的方式進行調試。如果你安裝了SQL Server調試組件,并且有足夠的權限,就可以連接到SQL Server的進程,并在服務器中為存儲過程設置斷點來一步步執行。

  調試Visual Studio中的多個項目

  在實際開發中,我們往往分了許多層,有許多的項目集合在一個解決方案下。我們可以右擊要調試的項目選擇“調試--> 運行新實例”來實現調試這個項目。我也可以右擊解決方案,選擇多項目調試,如下圖:

  我們還可以設置項目的期待順序。在客戶端/服務器(CS結構)程序中,我們可以使用這一方法來確保服務器端程序在客戶端程序之前運行。

  只在特定類型的異常時中斷

  一個健壯的程序會在運行時處理所有可能出現的異常。不過開發者在調試復雜的程序時會覺得這樣有些麻煩。因為所有的異常都被處理掉了。在出現任何異常時,Visual Studio不會再進行處理,或者中斷代碼來對用戶作出提示。

  幸運的是Visual Studio有個選項可以讓開發者指定他們關心的異常類型。選擇菜單欄à調試à異常,或者使用快捷鍵Ctrl+Alt+E。如下圖:

  我們可以看到一個樹狀結構列出所有VS可以監視到的異常。

  后面的兩個勾選框的意思分別為是否被拋出和用戶是否不處理。 

   參考

  《Visual Studio.NET使用技巧手冊》

  http://msdn.microsoft.com/

0
0
 
標簽:C# VS
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()