Share via


快速入門:偵錯工具巡覽 (Xaml 和 C#)

本快速入門示範如何巡覽 Visual Studio 偵錯工作階段,以及如何在工作階段中檢視和變更程式狀態。

本快速入門適用於新近使用 Visual Studio 進行偵錯的開發人員,以及想要進一步了解在 Visual Studio 偵錯工作階段中巡覽的開發人員。但不涉及偵錯本身的技巧。範例程式碼中的方法只是設計用來示範本主題中所描述的偵錯程序。這些方法並不會採用應用程式或函式設計的最佳做法。實際上,您很快會發現方法和應用程式本身不會執行什麼動作。

本快速入門的各節已盡可能設計為獨立的小節,所以您可略過包含已熟悉資訊的任何小節。此外,您也不需要建立範例應用程式,不過我們依然建議您這麼做,讓處理序盡可能簡單一點。

**偵錯工具鍵盤快速鍵。**Visual Studio 偵錯工具巡覽已同時針對滑鼠和鍵盤進行最佳化。本主題中的許多步驟都包含以括號註記的鍵盤快速鍵。例如,(快速鍵:F5) 表示輸入按鍵 F5 可開始或繼續執行偵錯工具。

本主題內容

您將學習如何:

  • Create the sample app

  • Set and run to a breakpoint, step into a method, and examine program data

  • Step into, over, and out of methods

  • Set a conditional breakpoint, run to the cursor, and visualize a variable

  • Edit and continue, recover from an exception

建立範例應用程式

偵錯與程式碼息息相關,所以範例應用程式只會使用 Windows 市集應用程式的架構建立原始程式檔,您可以在此檔案中看見巡覽偵錯工作階段的運作方式,以及如何檢查和變更程式狀態。您將叫用的所有程式碼是從主頁面的建構函式呼叫,不會新增任何控制項,也不會處理任何事件。

**建立預設 C# Windows 市集應用程式。**開啟 Visual Studio。在首頁上,選擇 [新增專案] 連結。在 [新增專案] 對話方塊上,選擇 [已安裝] 清單中的 [Visual C#],然後選擇 [Windows 市集]。在專案範本清單中,選擇 [應用程式]。Visual Studio 會建立新的方案和專案,並顯示 MainPage.xaml 設計工具和 XAML 程式碼編輯器。

**開啟 MainPage.xaml.cs 原始程式檔。**以滑鼠右鍵按一下 XAML 編輯器中的任何位置並選擇 [檢視程式碼]。MainPage.xaml.cs 程式碼後置檔案隨即顯示。請注意,檔案中只會列出一個方法,也就是 MainPage() 建構函式。

**以範例程式碼取代 MainPage 建構函式。**刪除 MainPage() 方法。遵循此連結:偵錯工具巡覽範例程式碼 (Xaml 和 C#),然後將 C# 小節中所列的程式碼複製到剪貼簿 (在瀏覽器或說明檢視器中選擇 [上一頁],返回此快速入門頁面)。在 Visual Studio 編輯器中,於 partial class MainPage 區塊中貼上程式碼。選擇 CTRL + s 儲存檔案。

您現在可以跟著本主題中的範例進行。

設定並執行至中斷點、逐步執行方法,以及檢查程式資料

開始偵錯工作階段的最常見方式就是從 [偵錯] 功能表選擇 [開始偵錯] (快速鍵:F5)。執行隨即開始並繼續執行到中斷點為止,若以手動方式暫停執行,就會擲回例外狀況,或結束應用程式。

在偵錯工具中暫停執行時,將滑鼠移到變數上,可以在資料提示中檢視使用中變數的值。您也可以開啟 [區域變數] 和 [自動變數] 視窗,查看使用中變數清單與其目前的值。將一或多個變數新增到監看式視窗,可讓您在應用程式繼續執行時,將焦點放在變數值上。

暫停執行應用程式 (也稱為中斷偵錯工具) 之後,您可控制其餘程式碼的執行方式。您可以逐行繼續進行 (從方法呼叫移至方法本身),也可以在單一步驟中執行呼叫的方法。這些程序會在逐步執行應用程式時呼叫。您也可以繼續應用程式的標準執行,執行到您所設定的下一個中斷點,或執行到游標所在的程式碼行。您可以隨時停止偵錯工作階段。偵錯工具已設計成執行必要的清理作業並結束執行。

Hh441470.collapse_all(zh-tw,VS.110).gif範例 1

在這個範例中,您會在 MainPage.xaml.cs 檔案的 MainPage 建構函式中設定中斷點、逐步執行第一個方法、檢視變數值,然後停止偵錯。

**設定中斷點。**在 MainPage 建構函式中的陳述式 methodTrack = "Main Page"; 設定中斷點。選擇原始程式碼編輯器之灰色邊框中的程式行 (快速鍵:將游標放在程式行上,然後選擇 F9 鍵)。

逐步執行

中斷點圖示會出現在邊框中。

**執行到中斷點。**在 [偵錯] 功能表上選擇 [開始偵錯] (快速鍵:F5),開始偵錯工作階段。

應用程式會開始執行,並在您設定中斷點的陳述式之前立即暫停執行。邊框中的目前程式碼行圖示會識別您的位置,而且目前的陳述式會反白顯示。

設定中斷點

您現在便已掌控應用程式的執行,還可在逐步執行程式陳述式時檢查程式狀態。

**逐步執行方法。**在 [偵錯] 功能表上,選擇 [逐步執行] (快速鍵:F11)。

目前行

請注意,偵錯工具會移到下一行,而該程式碼行會呼叫 Example1 方法。再次選擇 [逐步執行]。偵錯工具會移到 Example1 方法的進入點。這表示已在呼叫堆疊上載入此方法,並已配置區域變數的記憶體。

當您逐步執行一行程式碼時,偵錯工具會執行下列其中一個動作:

  • 如果下一個陳述式不會呼叫方案中的函式,則偵錯工具會執行此陳述式、移到下一個陳述式,然後暫停執行。

  • 如果陳述式會呼叫方案中的函式,則偵錯工具會移到所呼叫函式的進入點,然後暫停執行。

請繼續逐步執行 Example1 的陳述式,直到您到達結束點為止。偵錯工具會反白顯示方法的右大括號。

**在資料提示中檢查變數值。**當您將滑鼠游標停留在變數名稱上,此變數的名稱、值和型別隨即顯示在資料提示中。

偵錯工具資料提示

將滑鼠游標停留在變數 a 上。請注意名稱、值和資料型別。將滑鼠游標停留在變數 methodTrack 上。請再次注意名稱、值和資料型別。

**在 [區域變數] 視窗中檢查變數值。**在 [偵錯] 功能表上,指向 [視窗],然後選擇 [區域變數] (快速鍵:Alt+4)。

[區域變數] 視窗

[區域變數] 視窗是函式的參數和變數樹狀檢視。物件變數的屬性是物件本身的子節點。this 變數是在表示物件本身的每一個物件方法中的隱藏參數。在此案例中,它表示 MainPage 類別。因為 methodTrack 是 MainPage 類別的成員,所以其值和資料型別會列在 this之下的一行中。展開 this 節點,可以檢視 methodTrack 資訊。

為 methodTrack 變數加入監看式在本快速入門中,methodWatch 變數用來顯示在範例中呼叫的方法。為了更方便檢視此變數的值,請將該變數加入監看式視窗。以滑鼠右鍵按一下 [區域變數] 視窗中的變數名稱,然後選擇 [加入監看式]。

[監看式] 視窗

您可以在監看式視窗中監看多個變數。每次暫停執行時,監看的變數值 (如 [區域變數] 和資料提示視窗中的值) 都會進行更新。您也可以從程式碼編輯器將變數加入至監看式視窗。選取要監看的變數,以滑鼠右鍵按一下,然後選擇 [加入監看式]。

逐步執行、跳過和跳離方法

相對於逐步執行父方法所呼叫的方法,跳過方法時會執行子方法,然後在父方法繼續時,暫停執行呼叫方法。當您很熟悉方法的運作方式並確定其執行不會影響您所調查的問題時,即可跳過此方法。

跳過一行不包含方法呼叫的程式碼時,會像逐步執行程式碼行一樣執行該程式碼行。

跳離子方法時會繼續執行方法,然後在方法回到其呼叫方法之後暫停執行。當您判斷長函式的其餘部分都不重要時,可以跳離該函式。

跳過和跳離函式時都會執行函式。

逐步執行、不進入和跳離方法

Hh441470.collapse_all(zh-tw,VS.110).gif範例 2

在這個範例中,您會逐步執行、跳過和跳離方法。

**在 MainPage 建構函式中呼叫 Example2 方法。**編輯 MainPage 建構函式並以 Example2(); 取代 methodTrack = String.Empty; 的下一行。

從 Demo 方法呼叫 Example2 方法

**執行到中斷點。**在 [偵錯] 功能表上選擇 [開始偵錯] (快速鍵:F5),開始偵錯工作階段。偵錯工具會在中斷點暫停執行。

**跳過程式碼行。**在 [偵錯] 功能表上,選擇 [跳過] (快速鍵:F10)。偵錯工具執行 methodTrack = "MainPage"; 陳述式的方式,與逐步執行此陳述式的方式相同。

**逐步執行 Example2 和 Example2_A。**選擇 F11 鍵,逐步執行範例 2 方法。繼續逐步執行 Example2 陳述式,直到您到達 int x = Example2_A(); 這一行為止。再次逐步執行這一行,以移到 Example2_A 的進入點。繼續逐步執行 Example2_A 的每個陳述式,直到您回到 Example2 為止。

Example2

**跳過函式。**請注意,Example2 的下一行 int y = Example2_A();,基本上與前一行相同。您可以放心地跳過這一行。選擇 F10 鍵,從繼續執行的 Example2 移到第二次呼叫的 Example2_A。選擇 F10 可以跳過此方法。請注意,methodTrack 字串表示 Example2_A 方法已執行兩次。您也會發現偵錯工具立即移到下一行。它不會在 Example2 的繼續點暫停執行。

**跳離函式。**選擇 F11 鍵,逐步執行 Example2_B 方法。請注意,Example2_B 與 Example2_A 差異不大。若要跳離方法,請選擇 [偵錯] 功能表上的 [跳離] (快速鍵:Shift + F11)。請注意,methodTrack 變數表示 Example2_B 已執行,而且偵錯工具已回到 Example2 的繼續點。

**停止偵錯。**在 [偵錯] 功能表上,選擇 [停止偵錯] (快速鍵:Shift+F5)。這麼做會結束偵錯工作階段。

設定條件式中斷點,執行到游標所在處,並將變數視覺化

條件式中斷點可指定導致偵錯工具暫停執行的條件。此條件是由可評估為 true 或 false 的任何程式碼運算式所指定。例如,只有在變數達到特定值時,您才能使用條件式中斷點來檢查在常呼叫之方法中的程式狀態。

執行到游標所在處就如同設定一次性中斷點。暫停執行時,您可以選取原始碼中的一行並繼續執行,直到您到達選取的程式碼行為止。例如,您可以逐步執行方法中的迴圈,並判斷迴圈中的程式碼正常執行。您可以執行到在迴圈執行後的游標所在處,而不用逐步執行迴圈的每一個反覆項目。

但是有時候,難以在資料提示列或變數視窗中檢視變數值。偵錯工具可以在文字視覺化檢視中顯示字串、HTML 和 Xml,而文字視覺化檢視會在可捲動視窗中呈現值的格式化檢視。

Hh441470.collapse_all(zh-tw,VS.110).gif範例 3

在這個範例中,您會設定條件式中斷點,在迴圈的特定反覆項目中斷,然後執行到迴圈之後的游標所在處。您也可以在文字視覺化檢視中檢視變數值。

**在 MainPage 建構函式中呼叫 Example3 方法。**編輯 MainPage 建構函式並以 Example3(); 這一行取代 methodTrack = String.Empty; 的下一行。

從 Demo 方法呼叫 Example3 方法

**執行到中斷點。**在 [偵錯] 功能表上選擇 [開始偵錯] (快速鍵:F5),開始偵錯工作階段。偵錯工具會在 MainPage 方法的中斷點暫停執行。

**逐步執行 Example3 方法。**在 [偵錯] 功能表上選擇 [逐步執行] (快速鍵:F11),移到 Example3 方法的進入點。繼續逐步執行方法,直到您已反覆執行 for 區塊的一或兩個迴圈為止。請注意,逐步執行全部 1000 個反覆項目會花費較長的時間。

**設定條件式中斷點。**在程式碼視窗的左邊框中,以滑鼠右鍵按一下 x += i; 這一行,然後選擇 [條件]。選擇 [條件] 核取方塊,然後在文字方塊中輸入 i == 500;。選擇 [為 True] 選項,然後選擇 [確定]。此中斷點可讓您檢查位於 for 迴圈的第 500 個反覆項目的值。

[中斷點條件] 對話方塊

您可以藉由白色十字來識別條件式中斷點圖示。

條件中斷點

**執行到中斷點。**在 [偵錯] 功能表上選擇 [繼續] (快速鍵:F5)。在 [區域變數] 視窗中,確認 i 的目前值為 500。請注意,變數 s 是以單行表示,而且比視窗要長很多。

**將字串變數視覺化。**按一下 s的 [] 欄中的放大鏡圖示。

[文字視覺化檢視] 視窗隨即出現,而字串值會呈現為多行的字串。

**執行至游標處。**以滑鼠右鍵按一下 methodTrack += "->Example3"; 這一行,然後選擇 [執行至游標處] (快速鍵:將游標移到此行,Ctrl + F10)。偵錯工具會完成迴圈反覆項目,然後在這一行暫停執行。

**停止偵錯。**在 [偵錯] 功能表上,選擇 [停止偵錯] (快速鍵:Shift+F5)。這麼做會結束偵錯工作階段。

編輯後繼續,從例外狀況復原

在某些情況下,當您在 Visual Studio 偵錯工具內中斷程式碼時,您有機會變更變數值,甚至可以變更陳述式的邏輯。這項功能稱為「編輯後繼續」。

當您在例外狀況下中斷時,「編輯後繼續」特別有用。您可以「回溯」例外狀況,將執行作業移到例外狀況發生的前一刻,然後變更違規的變數或陳述式,並且在不會擲回例外狀況的狀態下,繼續進行目前的偵錯工作階段,而不必停止後重新開始對冗長的相關程序進行偵錯,以避免發生例外狀況。

雖然您可以在各種情況下使用「編輯後繼續」,但是難以指出不支援「編輯後繼續」的特殊條件,因為這些條件取決於程式設計語言、程式堆疊的目前狀態,以及偵錯工具在不毀損處理序的情況下變更狀態的能力。判斷是否支援編輯變更的最佳方法就是嘗試看看,偵錯工具會立即讓您知道是否支援變更。

Hh441470.collapse_all(zh-tw,VS.110).gif範例 4

在這個範例中,您會將偵錯工具執行至例外狀況、回溯例外狀況、更正方法的邏輯,然後變更變數值,以便繼續執行此方法。

**在 MainPage 建構函式中呼叫 Example4 方法。**編輯 MainPage() 建構函式並以 Example4(); 這一行取代 methodTrack = String.Empty; 的下一行。

從 Demo 方法呼叫 Example4 方法

**執行至例外狀況。**在 [偵錯] 功能表上選擇 [開始偵錯] (快速鍵:F5),開始偵錯工作階段。再次按 F5 繼續執行。偵錯工具會在 Example4 方法發生例外狀況時暫停執行,並顯示例外狀況對話方塊。

[例外狀況] 對話方塊

**變更程式邏輯。**很明顯是 if 條件有錯誤:當 x 等於 0 時 (而非 x 不等於零時),應變更 x 的值。選擇 [中斷] 以修正方法的邏輯。當您嘗試編輯程式碼行時,另一個對話方塊隨即出現。

[編輯後繼續] 對話方塊

選擇 [編輯],然後將 if (x != 0) 這一行變更為 if (x == 0)。偵錯工具會將程式邏輯的變更保存至原始程式檔。

**變更變數值。**在資料提示或在 [區域變數] 視窗中檢查 x 的值。它仍為 0 (零)。如果您嘗試執行導致原始例外狀況的陳述式,則只會再次擲回此例外狀況。您可以變更 x 的值。在 [區域變數] 視窗中,按兩下 [x] 列的 [] 欄。將此值從 0 變更為 1。

編輯 [區域變數] 視窗中的值

選擇 F11 鍵,逐步執行先前擲回例外狀況的陳述式。請注意,執行的程式碼行並未發生錯誤。再次選擇 F11。

**停止偵錯。**在 [偵錯] 功能表上,選擇 [停止偵錯] (快速鍵:Shift+F5)。這麼做會結束偵錯工作階段。

請參閱

概念

如何啟動偵錯工作階段 (Visual C++、Visual C# 和 Visual Basic)

如何在 Windows 市集應用程式中觸發暫停、繼續和背景事件

偵錯 Windows 市集應用程式