共用方式為


教學課程:使用Visual Studio對 .NET 控制台應用程式進行偵錯

本教學課程介紹Visual Studio中可用的偵錯工具。

重要

所有鍵盤快捷方式都是以 Visual Studio 中的預設值為基礎。 您的鍵盤快捷方式可能會有所不同,如需詳細資訊,請參閱Visual Studio中的 鍵盤快捷方式。

先決條件

使用除錯建置組態

除錯發行版 是 Visual Studio 的內建組建組態。 您可以使用偵錯組建配置進行調試,並使用發行配置來進行最終的版本發行。

在 [偵錯] 組態中,程式會使用完整的符號偵錯資訊編譯,而且不會進行優化。 優化會使偵錯複雜,因為原始程式碼與產生的指令之間的關聯性比較複雜。 程序的發行組態沒有符號偵錯資訊,而且已完全優化。

根據預設,Visual Studio 會使用偵錯組建組態,因此您不需要在偵錯之前加以變更。

  1. 啟動 Visual Studio。

  2. 開啟您在 中使用 Visual Studio 建立的 .NET 控制台應用程式專案

    目前的組建組態會顯示在工具列上。 下列工具列影像顯示 Visual Studio 已設定為編譯應用程式的偵錯版本:

    Visual Studio 工具列,其中已醒目提示偵錯

設定斷點

斷點 會在執行設有斷點的行之前,暫時中斷應用程式的執行。

  1. 在顯示名稱、日期和時間的程式碼行上,點擊程式碼視窗左邊界以設定 斷點。 左邊界位於行號的左側。 設定斷點的其他方式是將游標放在程式代碼行中,然後按 F9,或從功能表欄選擇 [偵錯]>[切換斷點]

    如下圖所示,Visual Studio 透過將設定斷點的行反白並在左邊界顯示紅點來指示斷點的位置。

    設定斷點的 Visual Studio 程式視窗

  2. F5,以偵錯模式執行程式。 另一種開始偵錯的方式是從功能表中選擇 [偵錯]>[開始偵錯]

  3. 當程式提示輸入名稱時,請在主控台視窗中輸入字串,然後按 Enter

  4. 程序執行會在到達斷點並在執行 Console.WriteLine 方法之前停止。 [[局部變數] 視窗會顯示目前執行中方法中定義的變數值。

    Visual Studio 中斷點的螢幕快照

使用 [立即] 視窗

[即時] 視窗可讓您與正在偵錯的應用程式互動。 您可以互動方式變更變數的值,以查看其如何影響程式。

  1. 如果看不到 [即時運算] 視窗,請藉由選擇 [偵錯>Windows>實時運算來顯示它。

  2. 在 [實時] 視窗中輸入 name = "Gracie",然後按 Enter 鍵。

  3. 在 [實時] 視窗中輸入 currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime(),然後按 Enter 鍵。

    [即時] 視窗會顯示字串變數的值及 DateTime 值的屬性。 此外,[局部變數] 視窗 中的變數值也會被更新。

    Visual Studio 2019 局部變數和即時視窗

  4. F5 以繼續執行程式。 另一種方式是從選單中選擇 偵錯>繼續

    主控台視窗中顯示的數值對應您在 [即時視窗] 中所做的變更。

    主控台視窗,其中顯示輸入的值

  5. 按任意鍵以結束應用程式並停止偵錯。

設定條件斷點

程式會顯示使用者輸入的字串。 如果使用者未輸入任何內容,會發生什麼事? 您可以使用稱為 條件斷點的實用偵錯功能來測試此功能。

  1. 用滑鼠右鍵點擊代表斷點的紅點。 在操作功能表中,選取 [條件] 以開啟 [斷點設定] 對話框。 請選取 條件 的方塊,如果尚未選取。

    顯示斷點設定面板的 編輯器 - C#

  2. 針對 [條件表達式],在欄位中輸入下列程式代碼,以顯示測試 x 是否為 5 的範例程式代碼。

    string.IsNullOrEmpty(name)
    
    String.IsNullOrEmpty(name)
    

    每次斷點被觸發時,除錯器都會呼叫 String.IsNullOrEmpty(name) 方法,只有在方法呼叫傳回 true時,才會在這行中斷。

    您可以指定 命中計數,在語句執行到達指定次數之前,中止程式執行,而不是使用條件表達式。 另一個選項是指定 篩選條件,這會根據線程標識碼、進程名稱或線程名稱等屬性中斷程式執行。

  3. 選取 [關閉] 關閉對話框。

  4. F5以偵錯模式啟動程式。

  5. 在主控台視窗中,當系統提示您輸入名稱時,請按 Enter 鍵。

  6. 因為您指定的條件(namenullString.Empty)已被滿足,程式執行將在到達斷點時停止,並且會在執行 Console.WriteLine 方法之前停止。

  7. 選取 局部變數 視窗,其中顯示目前執行中方法的局部變數值。 在此情況下,Main 是目前正在執行的方法。 觀察 name 變數的值是 ""String.Empty

  8. [即時運算] 視窗中輸入下列語句,然後按下 Enter鍵,確認值為空字串。 結果是 true

    ? name == String.Empty
    
    ? String.IsNullOrEmpty(name)
    

    問號會將即時視窗導向 評估表示式

    立即視窗在語句執行後傳回值為 true - C#

  9. F5 以繼續執行程式。

  10. 按任意鍵以關閉主控台視窗並停止偵錯。

  11. 按兩下程式代碼視窗左邊界中的點,以清除斷點。 其他清除斷點的方式是按下 F9,或在選取程式碼的行時選擇 偵錯 > 切換斷點

逐步執行程式

Visual Studio 也可讓您逐行執行程式並監視其執行。 通常,您會設定斷點,並跟蹤程式流程以檢查程式碼的一小部分。 由於此程式很小,因此您可以逐步深入了解整個程式。

  1. 選擇 [偵錯 >逐步執行。 一次偵錯一個語句的另一種方式是按 F11

    Visual Studio 會醒目提示並顯示下一行執行旁的箭號。

    C#

    Visual Studio 逐步執行方法 - C#

    Visual Basic

    Visual Studio 逐步執行方法 - Visual Basic

    此時,[局部變數] 視窗會顯示 args 陣列是空的,且 namecurrentDate 具有預設值。 此外,Visual Studio 已開啟空白控制台視窗。

  2. F11。 Visual Studio 現在會亮顯下一行要執行的程式。 [局部變數] 視窗不變,控制台視窗會維持空白。

    C#

    使用 Visual Studio 對方法來源進行單步執行 - C#

    Visual Basic

    Visual Studio 逐步執行方法原始碼 - Visual Basic

  3. F11。 Visual Studio 會反白顯示包含 name 變數指派的語句。 [Locals] 視窗會顯示 namenull,而控制台視窗會顯示字串「你的名字是什麼?」。

  4. 在主控台視窗中輸入字串,然後按 enter Enter來回應提示。 主控台沒有回應,而且您輸入的字串不會顯示在控制台視窗中,但 Console.ReadLine 方法仍會擷取您的輸入。

  5. F11。 Visual Studio 會強調顯示包含 currentDate 變數指派的語句。 [局部變數] 視窗會顯示呼叫 Console.ReadLine 方法所傳回的數值。 控制台視窗也會顯示您在提示中輸入的字串。

  6. F11。 [局部] 視窗會顯示從 DateTime.Now 屬性指派之後的 currentDate 變數值。 主控台視窗不會變更。

  7. F11。 Visual Studio 會呼叫 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化字串。

  8. 選擇 [偵錯] >[跳出]。停止逐步執行的另一種方法是按下 Shift+F11

    主控台視窗會顯示訊息,並等候您按下按鍵。

  9. 按任意鍵以關閉主控台視窗並停止偵錯。

使用釋出建置設定

測試過應用程式的偵錯版本之後,您也應該編譯及測試發行版本。 發行版本包含編譯程式優化,有時可能會對應用程式的行為產生負面影響。 例如,設計來改善效能的編譯程式優化可以在多線程應用程式中建立競爭條件。

若要建置及測試主控台應用程式的發行版本,請將工具列上的組建組態從 [偵錯] 變更為 [發行]

預設的 Visual Studio 工具列,已將發行項目醒目提示

當您按下 F5,或從 [組建] 功能表 選擇 [建置方案] 時,Visual Studio 會編譯應用程式的 [發行] 版本。 您可以像偵錯版本一樣測試它。

後續步驟

在本教學課程中,您已使用 Visual Studio 偵錯工具。 在下一個教學課程中,您會發佈可部署的應用程式版本。

使用 Visual Studio 發佈 .NET 控制台應用程式