練習:設定中斷點

已完成

中斷點會在偵錯程序暫停執行期間使用。 這可讓您追蹤變數,並檢查執行程式碼的順序。 中斷點是啟動偵錯程序的絕佳方式。

設定中斷點

稍早在本課程模組中,您已完成在調試程式中執行應用程式的練習。 應用程式會在 [偵錯控制台] 面板中顯示「問候訊息」。 練習結束時,您注意到程式代碼會以非預期的方式重複 Andrew 的問候語。

在此練習中,您將使用中斷點來協助您識別問題。

  1. 請確定您的Program.cs檔案包含下列程式代碼範例:

    /* 
    This code uses a names array and corresponding methods to display
    greeting messages
    */
    
    string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" };
    
    string messageText = "";
    
    foreach (string name in names)
    {
        if (name == "Sophia")
            messageText = SophiaMessage();
        else if (name == "Andrew")
            messageText = AndrewMessage();
        else if (name == "AllGreetings")
            messageText = SophiaMessage();
            messageText = messageText + "\n\r" + AndrewMessage();
    
        Console.WriteLine(messageText + "\n\r");
    }
    
    bool pauseCode = true;
    while (pauseCode == true);
    
    static string SophiaMessage()
    {
        return "Hello, my name is Sophia.";
    }
    
    static string AndrewMessage()
    {
        return "Hi, my name is Andrew. Good to meet you.";
    }
    
  2. 使用 Visual Studio Code 調試程式工具,在迴圈內的第一個程式代碼行上 foreach 設定斷點。

    顯示程式代碼中斷點的螢幕快照。

    小提示

    切換 (開/關) 中斷點的一個簡單選項是,選取 (按一下滑鼠左鍵) 行號左邊的區域。 您也可以使用 Run 功能表和鍵盤快捷方式來設定斷點。

  3. 在 [ 執行] 功能表上,選取 [ 開始偵錯]。

  4. 請注意,程式代碼執行會在斷點暫停,而且目前的程式代碼行會在編輯器中反白顯示。

    螢幕擷取畫面顯示中斷點上暫停的程式碼執行。

  5. 在 [偵錯控制項] 工具列上,選取 [逐步執行]

    您可以將滑鼠指標停留在 [ 偵錯] 控制項 工具列上的按鈕上,以顯示按鈕標籤。

  6. 請注意,程式代碼執行會前進到下列程式代碼行並暫停:

    messageText = SophiaMessage();
    

    此程式代碼列會將 方法的 SophiaMessage 傳回值指派給字串變數 messageText

  7. 請稍作思考為何選取 Step Into 會產生此結果。

    • [逐步執行] 按鈕可用來前進到下一個可執行檔陳述式。
    • 由於在 names 陣列中的第一個元素是 Sophia,而且 if 語句正在比較名稱 Sophia,因此表達式會評估為 true,然後程式碼執行會進入 if 語句的代碼區塊。
  8. 在 [偵錯控制項] 工具列上,選取 [逐步執行]

  9. 請注意,程式代碼執行會前進到 SophiaMessage 方法並暫停。

    [逐步執行] 按鈕已前進到下一個可執行檔程式碼行。 下一個可執行的程式代碼行不是檔案中的下一行號碼,它是執行路徑中的下一個語句。 在此情況下,下一個可執行語句是 方法的 SophiaMessage 進入點。

  10. 在 [ 偵錯控件] 工具列上,選取 [ 跳出]。

  11. 注意,程式碼執行會回到呼叫 SophiaMessage 方法的那一行程式碼,然後暫停。

  12. 請花點時間考慮為何選取 [跳出 ] 會產生此結果。

    在方法內時, [跳出 ] 按鈕會完成目前方法的其餘行,然後返回叫用方法的執行內容。

  13. 在 [偵錯控制項] 工具列上,選取 [逐步執行]

  14. 請注意,程式代碼執行會前進到下列程式代碼行並暫停:

    messageText = messageText + "\n\r" + AndrewMessage();
    
  15. 請花點時間考慮為何執行進階至此程式代碼行。

    雖然程式代碼縮排表示此程式代碼行是語句程式代碼區塊 else if 的一部分,但不是。 使用大括弧 {} 來定義此 if - else if 結構的代碼區塊,可以幫助避免這個錯誤。 撰寫程式代碼時,每次迴圈反覆執行時,都會將 Andrew 的訊息新增至 messageText

確認您的程式代碼更新

在程式代碼中隔離問題之後,您應該更新程式碼,然後確認問題已修正。

  1. 在 [ 偵錯控件] 工具列上,選取 [ 停止]。

  2. 請花一分鐘的時間修正程式碼邏輯。

    您有幾個選項可用來修正程式碼中識別的問題。 例如:

    • 您可以保留現有的程式代碼行,並將大括弧 {} 新增至 if 每個程式代碼區塊的結構。

    • 您可以合併最後 else if 一個語句後面的兩個程式代碼行,形成單一語句,如下所示:

      else if (name == "AllGreetings")
          messageText = SophiaMessage() + "\n\r" + AndrewMessage();
      

    不論是哪一種方式,更新的程式碼都必須在 AndrewMessage 時在程式碼區塊中包含對 name == "AllGreetings" 的呼叫。

  3. 在 [檔案] 功能表上,選取 [儲存]

  4. 使用調試程式 UI 工具來清除您稍早設定的斷點。

  5. 在 [ 執行] 功能表上,選取 [ 開始偵錯]。

  6. 確認您的程式代碼現在會產生預期的結果。

    Hello, my name is Sophia.
    
    Hi, my name is Andrew. Good to meet you.
    
    Hello, my name is Sophia.
    Hi, my name is Andrew. Good to meet you.
    
  7. 在 [ 偵錯控件] 工具列上,選取 [ 停止]。

祝賀! 您已成功使用 Visual Studio Code 調試程式來協助您隔離和更正邏輯問題。

回顧

以下為本單元須記住的一些重點:

  • 使用斷點在偵錯過程中暫停程式代碼執行。
  • 使用 [偵錯控制項] 工具列中的 [逐步執行] 來觀察下一個可執行檔程式碼行。
  • 使用 [偵錯控制項] 工具列中的 [跳出] 前進到目前的方法,並回到呼叫方法的程式碼行。