C#調試心經續(轉)

斷點篇 前端

 

命中次數(Hit Counts)程序員

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

 

 

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

 

 

 因而在上篇中的條件也能夠這樣實現,設置命中次數等於50的時候break,按F5後,斷點被觸發,此時i=50框架

 

點過濾器工具

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

 

注意:ThreadId須要特別說明一下,ThreadId並非託管程序中,.NET 框架中System.Threading.Thread.ManagedThreadId,二者不能等同。簡單來講,ManagedThreadId是線程在CLR中的標識符,而ThreadId倒是線程在操做系統中的標識符。所以ThreadId須要從調試器中的「Threads」窗口中獲取。spa

 

斷點條件操作系統

咱們能夠設置斷點達到的條件,以下圖,咱們設置表達式爲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 代碼跟蹤服務以控制如何收集、存儲和顯示跟蹤結果。

關鍵的幾個選項:

1localOnly 默認爲false。這個很好理解。若是爲true,只在本地輸出跟蹤信息。

2enabled 是否啓用跟蹤。

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

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

5traceMode  指定顯示跟蹤信息的順序。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 CollectionQueryString集合(即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/

 

 


做者:Alexis
出處:http://www.cnblogs.com/alexis/
關於做者:專一於Windows Phone 七、Silverlight、Web前端(jQuery)。
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,若有問題,能夠經過shuifengxuATgmail.com  聯繫我,很是感謝。

相關文章
相關標籤/搜索