VS除錯的一些基本的技巧
設定斷點:在如下圖中的紅色圓點處設定斷點,紅色圓點表示已經在這行設定斷點。快捷鍵F9。
啟動除錯:按F5或者點選左邊紅框中的按鈕。右邊框是開始執行(不除錯)Ctrl+F5。
除錯工具欄:下面是工具欄中對應的名稱和快捷鍵。
在除錯過程中F5是執行到下一個斷點。F11是逐語句,在執行到下圖中的斷點時,按F11會執行到Fibonacci方法裡面逐步記錄執行過程。F10是逐過程,與逐語句不同的是,在執行到下圖中斷點時,再執行會執行斷點下面的語句,而不是去執行語句中的方法。
區域性變數:在除錯過程中可以檢視區域性變數視窗,如下圖裡面會有變數的當前狀態。如果找不到的話在
陣列的狀態表示如下圖:
InteliTrace記錄每一步的除錯狀態。
條件中斷
開發人員設定斷點,執行程式,利用不同的輸入觸發斷點,然後在斷點處手工檢查是否滿足某些特定的條件,從而決定是否繼續調查。如果當前場景不是他們想要的,按F5繼續執行程式,嘗試別的輸入,手動重複剛才的過程。
針對上述情況,Visual Studio提供了一個方便得多的功能——“條件中斷”。只有當程式滿足了開發人員預設的條件後,條件斷點才會被觸發,偵錯程式中斷。這將避免頻繁地手工檢查/恢復程式執行,大量減少除錯過程中的手工和煩瑣工作。
如何設定條件斷點:
設定條件斷點非常容易。在特定的行上,按F9設定斷點。
然後右擊斷點–編輯視窗左側的紅點,在上下文選單上選擇“條件”。
這時彈出一個對話方塊供你設定啟用該斷點所需的條件。比如:我們希望只有當x==5時,除錯才中斷。我們可以寫出如下的表示式:
現在我再執行這個程式按F5達到條件斷點,只有當x等於5時,程式執行才會被中斷。對於其它條件下的x值,斷點將被跳過。
記錄到達斷點次數
有時你希望,只有當第N次滿足條件的執行到達斷點時,才中斷程式執行。例如:當第一次命中斷點。可以通過右擊斷點,然後在彈出選單上選擇“命中次數”選單命令實現。
這時系統彈出一個對話方塊,它允許你指定:(1)當滿足條件,而且進入斷點的累計次數等於N時,斷點命中一次。(2)當滿足條件,而且進入斷點的累計次數是N的倍數時,斷點命中一次。(3)當滿足條件,而且進入斷點的累計次數大於N時,每次命中斷點。
注意:如果多個條件同時用的話,結果取交集。
斷點篩選器
例如,在除錯一個服務程式時在其內部打上了斷點,由於這是一個公用的服務不希望其他訪問這個服務的程式被所設斷點除錯干擾,怎麼辦?斷點篩選器就是限制只在某些程序和執行緒中設定斷點。篩選器文字框中輸入以下一個或多個子句,可以使用&(AND)、||(OR)、!(NOT)和圓括號組合這些子句描述應在何處設定斷點的表示式,或者清除該表示式以便在所有程序和執行緒中設定斷點。比如,希望斷點只在被機器名為xye-PC的機器訪問時才觸發,我們可以右擊斷點進行斷點篩選器設定。當其他機器訪問程式的時候斷點不會觸發,其他機器訪問時感覺不到斷點的存在。
跟蹤點—進入斷點時的自定義操作
許多人不知道“跟蹤點(TrackPoints)”這個除錯功能。“跟蹤點“是種特殊的斷點,當它被命中時,它會觸發一系列自定義操作。如果你想觀察程式的行為,而又不想中斷除錯的時候,這個功能尤其有用。
我將用一個簡單的控制檯程式來演示如何使用“跟蹤點”。如下是斐波那契數列的一個遞迴實現:
以上程式中,我們使用Console.WriteLine() 輸出針對特定輸入值生成的最終斐波那契數列。如果希望在偵錯程式裡觀察操作中每一次遞迴運算後的數列而又不實際中斷程式執行,該怎麼辦呢?“跟蹤點”可以輕鬆實現。
設定跟蹤點:
你可以在特定的行上,按F9加跟蹤點。然後右擊斷點,在上下文選單中選擇“命中條件”:
在彈出對話方塊上,你可以設定命中該斷點時,所觸發的事件。
在上面例子中,我們設定一旦命中斷點時就列印追蹤資訊。注意,我們已經把區域性變數“x”的值,作為追蹤資訊的一部分輸出。區域性變數可以通過{變 量名}語法輸出。你還可以利用系統內建的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追蹤資訊中輸出常用的除錯值。
在上例中,我們同時選中了底端的“continue execution“選項,這說明我們不希望程式中斷除錯狀態,而是繼續執行。唯一的不同是:每次斷點條件滿足時,我們的自定義追蹤資訊都將被輸出。
現在當我們執行程式時,會發現自定義追蹤資訊自動顯示在Visual Studio的“輸出“窗口裡。這讓我們很容易看到程式的遞迴呼叫過程:
你也可以選擇往應用程式中新增一個自定義追蹤資訊的監聽器。這時追蹤點的輸出資訊將通過它輸出,而不是Visual Studio的“輸出“視窗。