本教學介紹 Visual Studio 中可用的除錯工具。
這很重要
所有鍵盤快捷鍵都是基於 Visual Studio 的預設值。 你的鍵盤快捷鍵可能會有所不同,更多資訊請參考鍵盤快捷鍵在Visual Studio。
本教學介紹 Visual Studio Code 中可用於處理 .NET 應用程式的除錯工具。
本教學介紹了 GitHub Codespaces 中可用於處理 .NET 應用程式的除錯工具。
先決條件
這個教學適用於你在 Create a .NET console application 中建立的主控台應用程式。
使用除錯建置組態
在 [偵錯] 組態中,程式會使用完整的符號偵錯資訊編譯,而且不會進行優化。 優化會使偵錯複雜,因為原始程式碼與產生的指令之間的關聯性比較複雜。 程序的發行組態沒有符號偵錯資訊,而且已完全優化。
預設情況下,Visual Studio 會使用 Debug 建置設定,所以你不需要在除錯前更改它。
啟動 Visual Studio。
打開你在建立 .NET 控制台應用程式時所創建的專案。
目前的組建組態會顯示在工具列上。 以下工具列圖片顯示 Visual Studio 已設定為編譯除錯版本的應用程式:
設定中斷點
斷點 會在執行斷點的行之前,暫時中斷應用程式的執行。
在顯示名稱、日期和時間的程式碼行上,點擊程式碼視窗左邊界以設定 斷點。 左邊欄位位於行號的左邊位置。 設定斷點的其他方式是將游標放在程式代碼行中,然後按 F9,或從功能表欄選擇 [偵錯]>[切換斷點]。
如下圖所示,Visual Studio 透過高亮顯示斷點所在的線條,並在左側邊緣顯示紅點。
按 F5,以偵錯模式執行程式。 另一種開始偵錯的方式是從功能表中選擇 [偵錯]>[開始偵錯]。
當程式提示輸入名稱時,請在主控台視窗中輸入字串,然後按 Enter。
程序執行會在到達斷點並在執行
Console.WriteLine方法之前停止。 [[局部變數] 視窗會顯示目前執行中方法中定義的變數值。
啟動 Visual Studio Code。
打開你在 Create a .NET console application 建立專案的資料夾。
開啟 Program.cs 檔案。
在程式碼視窗左邊的空白區域點擊,於顯示名稱、日期和時間的行上設定 斷點。 左邊欄位位於行號的左邊位置。 設定斷點的其他方式是按下 F9,或當選取程式碼行時,從功能表選擇 [執行]>[切換斷點]。
Visual Studio Code 會透過在左側邊界顯示紅點來標示中斷點設定的行。
打開您在 建立一個.NET控制台應用程式 中創建的 GitHub Codespace。
打開 HelloWorld.cs 檔案。
在程式碼視窗左邊的空白區域點擊,於顯示名稱、日期和時間的行上設定 斷點。 左邊欄位位於行號的左邊位置。 你也可以在選擇程式碼行時按下 F9 來設定斷點。
開始偵錯
程式執行在達到斷點時停止,如前一節所述。 [[局部變數] 視窗會顯示目前執行中方法中定義的變數值。
Debug 和 Release 是 .NET 內建的建置配置。 您可以使用偵錯組建配置進行調試,並使用發行配置來進行最終的版本發行。
預設情況下,Visual Studio Code 啟動設定會使用 Debug 建置設定,因此你不需要在除錯前更改它。
選取左側功能表上的 [偵錯] 圖示,以開啟 [偵錯] 檢視。
選擇 執行和偵錯。 如果系統詢問,請選擇 C#,然後選擇 C#,啟動專案。 在偵錯模式中啟動程式的其他方式是按
F5 ,或從功能表選擇 [執行][開始偵錯] 。
若被要求 選擇啟動設定,請選擇 C#:偵錯目前的檔案。
選取 [偵錯控制台] 索引標籤,以查看程式在等候回應之前所顯示的「您的名稱為何?」提示。
在 偵錯控制台 視窗中,依提示輸入名稱的要求輸入字串,然後按 Enter。
當程序執行到達斷點並在執行
Console.WriteLine方法之前,它會停止。 Variables 視窗中的 [局部變數] 區段會顯示目前執行中方法中定義的變數值。
預設情況下,GitHub Codespaces 使用 Debug 建置設定,因此你不需要在除錯前更改設定。
選取左側功能表上的 [偵錯] 圖示,以開啟 [偵錯] 檢視。
選擇 執行和偵錯。 若被要求,選擇 C# 作為除錯器,然後選擇 C#: 除錯 Active File 作為啟動設定。
選取 [偵錯控制台] 索引標籤,以查看程式在等候回應之前所顯示的「您的名稱為何?」提示。
在 偵錯控制台 視窗中,依提示輸入名稱的要求輸入字串,然後按 Enter。
當程序執行到達斷點並在執行
Console.WriteLine方法之前,它會停止。 Variables 視窗中的 [局部變數] 區段會顯示目前執行中方法中定義的變數值。
使用 [立即] 視窗
[即時] 視窗可讓您與正在偵錯的應用程式互動。 您可以互動方式變更變數的值,以查看其如何影響程式。
如果 Immediate 視窗無法顯示,請選擇 Debug>Windows>Immediate 來顯示。
在 [
name = "Gracie"] 視窗中輸入 ,然後按 Enter 鍵。在 [
currentDate = DateTime.Parse("2026-02-05T20:25:00Z").ToUniversalTime()] 視窗中輸入 ,然後按 Enter 鍵。[即時] 視窗會顯示字串變數的值及 DateTime 值的屬性。 此外,[局部變數] 視窗 中的變數值也會被更新。
按 F5 以繼續執行程式。 另一種方式是從選單中選擇 偵錯>繼續。
主控台視窗中顯示的數值對應您在 [即時視窗] 中所做的變更。
按任意鍵以結束應用程式並停止偵錯。
使用偵錯主控台
偵錯控制台 視窗可讓您與正在偵錯的應用程式互動。 您可以變更變數的值,以查看其如何影響程式。
選取 [偵錯控制台] 索引標籤。
在
name = "Gracie"視窗底部的提示中輸入 ,接著按下 Enter鍵。
在 [偵錯控制台] 視窗
底部輸入 ,然後按 Enter 。[變數] 視窗會顯示
name和currentDate變數的新值。選取工具列中的 [繼續] 按鈕,以繼續執行程式。 另一個繼續方式是按 F5。
控制台視窗中顯示的值會對應至您在 偵錯控制台中所做的變更。
按 Enter 結束應用程式並停止偵錯。
設定條件斷點
程式會顯示使用者輸入的字串。 如果使用者未輸入任何內容,會發生什麼事? 您可以使用稱為 條件斷點的實用偵錯功能來測試此功能。
用滑鼠右鍵點擊代表斷點的紅點。 在操作功能表中,選取 [條件] 以開啟 [斷點設定] 對話框。 請選取 條件 的方塊,如果尚未選取。
顯示斷點設定面板的
對於 條件表達式,請在文字欄位輸入以下程式碼。
string.IsNullOrEmpty(name)String.IsNullOrEmpty(name)每次中斷點達成時,調試程式都會呼叫
String.IsNullOrWhiteSpace(name)方法,而且只有在方法呼叫傳回true時,才會在這行中斷。您可以指定 命中計數,在語句執行到達指定次數之前,中止程式執行,而不是使用條件表達式。 另一個選項是指定 篩選條件,這會根據線程標識碼、進程名稱或線程名稱等屬性中斷程式執行。
選取 [關閉] 以關閉該對話方塊。
按 F5以偵錯模式啟動程式。
在主控台視窗中,當系統提示您輸入名稱時,請按 Enter 鍵。
因為您指定的條件(
name為null或 String.Empty)已被滿足,程式執行將在到達斷點時停止,並且會在執行Console.WriteLine方法之前停止。選取 局部變數 視窗,其中顯示目前執行中方法的局部變數值。 在此情況下,
Main是目前正在執行的方法。 觀察name變數的值是""或 String.Empty。在 [即時運算] 視窗中輸入下列語句,然後按下 Enter鍵,確認值為空字串。 結果是
true。? name == String.Empty? String.IsNullOrEmpty(name)問號會將即時視窗導向 評估表示式。
按 F5 以繼續執行程式。
按任意鍵以關閉主控台視窗並停止偵錯。
按兩下程式代碼視窗左邊界中的點,以清除斷點。 其他清除斷點的方式是按下 F9,或在選取程式碼的行時選擇 偵錯 > 切換斷點。
在代表斷點的紅點上按下滑鼠右鍵(Ctrl-click on macOS)。 在操作功能表中,選取 [編輯斷點],以開啟可讓您輸入條件表達式的對話方塊。
選取下拉式清單中的
Expression,輸入下列條件表達式,然後按 Enter。String.IsNullOrEmpty(name)
每次中斷點達成時,調試程式都會呼叫
String.IsNullOrEmpty(name)方法,而且只有在方法呼叫傳回true時,才會在這行中斷。與其使用條件表達式,您可以指定 命中計數,此操作會在語句執行達到指定次數之前暫停程式執行。 另一個選項是指定 篩選條件,這會根據線程標識碼、進程名稱或線程名稱等屬性中斷程式執行。
按 F5以偵錯模式啟動程式。
在 [偵錯控制台] 索引標籤中,當系統提示您輸入您的名稱時,請按下 Enter。
因為您指定的條件(
name是null或name是Console.WriteLine)已滿足,所以程式執行會在到達斷點時且執行 方法之前停止。[變數] 視窗會顯示
name變數的值是""或 String.Empty。確認此值為空字串,請在偵錯控制台 提示字元中輸入下列
語句,然後按下 Enter 。 結果是true。name == String.Empty選取工具列上的 [繼續] 按鈕,以繼續執行程式。
按 Enter 結束程式並停止偵錯。
按兩下程式代碼視窗左邊界中的點,以清除斷點。 清除斷點的其他方式是按下 F9,或在選取程式代碼行時,從功能表中選擇 執行 > 切換斷點。
如果您收到斷點條件遺失的警告,請選取 [移除斷點]。
逐步執行程式碼
Visual Studio 也允許你逐行檢視程式執行。 通常,您會設定斷點,並跟蹤程式流程以檢查程式碼的一小部分。 由於此程式很小,因此您可以逐步深入了解整個程式。
在顯示「你叫什麼名字?」的程式碼行上設定一個中斷點。
選擇 [偵錯 >逐步執行。 一次偵錯一個語句的另一種方式是按 F11 。
Visual Studio 會在下一行執行旁邊標示並顯示箭頭。
此時,[局部變數] 視窗會顯示
args陣列是空的,且name和currentDate具有預設值。 此外,Visual Studio 也開啟了一個空白的主控台視窗。按 F11。 Visual Studio 會標示包含
name變數指派的陳述。 [Locals] 視窗會顯示name是null,而控制台視窗會顯示字串「你的名字是什麼?」。在主控台視窗中輸入字串,然後按 enter Enter來回應提示。 主控台沒有回應,而且您輸入的字串不會顯示在控制台視窗中,但 Console.ReadLine 方法仍會擷取您的輸入。
按 F11。 Visual Studio 會標示包含
currentDate變數指派的陳述。 [局部變數] 視窗會顯示呼叫 Console.ReadLine 方法所傳回的數值。 控制台視窗也會顯示您在提示中輸入的字串。按 F11。 [局部] 視窗會顯示從
currentDate屬性指派之後的 DateTime.Now 變數值。 主控台視窗不會變更。按 F11。 Visual Studio呼叫 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化字串。
選擇 [偵錯] >[跳出]。停止逐步執行的另一種方法是按下 Shift+F11。
主控台視窗會顯示訊息,並等候您按下按鍵。
按任意鍵以關閉主控台視窗並停止偵錯。
Visual Studio Code 也允許你逐行檢視程式執行。 通常,您會設定斷點,並跟蹤程式流程以檢查程式碼的一小部分。 由於此程式很小,因此您可以逐步深入了解整個程式。
在顯示「你叫什麼名字?」的程式碼行上設定一個中斷點。
按 F5 開始偵錯。
Visual Studio Code 會標示斷點線。
此時,[變數] 視窗會顯示
args陣列是空的,name和currentDate都有預設值。從除錯工具列選擇「 Step In 」或按 F11。
Visual Studio Code 會標示下一行。
Visual Studio Code 執行
Console.WriteLine以顯示名稱提示,並標示下一行將執行的程式碼。 下一行是Console.ReadLine的name。 變數 視窗不變,而 [終端機] 索引標籤會顯示 [您的名稱為何?] 提示。選擇 「Step Into」 或按 F11。
Visual Studio Code 會標示
name變數指派。 [變數] 視窗顯示name仍然是null。在 [終端機] 索引標籤中輸入字串,然後按 Enter來回應提示。
偵錯控制台 索引標籤可能不會顯示您在輸入時輸入的字串,但 Console.ReadLine 方法會擷取您的輸入。
選擇 「Step Into」 或按 F11。
Visual Studio Code 會標示
currentDate變數指派。 [Variables] 視窗會顯示呼叫 Console.ReadLine 方法所傳回的值。 [終端機] 索引標籤會顯示您在提示符中輸入的字串。選擇 「Step Into」 或按 F11。
[變數] 視窗顯示
currentDate變數的值,該值是從 DateTime.Now 屬性指派後得到的。選擇 「Step Into」 或按 F11。
Visual Studio Code 調用 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化字串。
選擇 Step Out 或按 Shift鍵+F11。
終端會顯示「按任意鍵結束...」。
按任意鍵結束程式。
使用釋出建置設定
測試過應用程式的偵錯版本之後,您也應該編譯及測試發行版本。 發行版本包含編譯程式優化,有時可能會對應用程式的行為產生負面影響。 例如,設計來改善效能的編譯程式優化可以在多線程應用程式中建立競爭條件。
若要建置及測試主控台應用程式的發行版本,請將工具列上的組建組態從
當你按下 F5 或從 Build 選單中選擇 Build Solution,Visual Studio 會編譯應用程式的 Release 版本。 您可以像偵錯版本一樣測試它。
若要建置及測試主控台應用程式的發行版本,請開啟 終端機 並執行下列命令:
dotnet run --configuration Release
要建置並測試你的主控台應用程式的 Release 版本,請在終端機執行以下指令:
dotnet run --configuration Release HelloWorld.cs
後續步驟
在這個教學中,你使用了除錯工具。 在下一個教學課程中,您會發佈可部署的應用程式版本。