教學課程:使用 Visual Studio for Mac 為 .NET 主控台應用程式偵錯
重要
Microsoft 已宣佈淘汰 Visual Studio for Mac。 從 2024 年 8 月 31 日起,將不再支援 Visual Studio for Mac。 替代方案包括:
- Visual Studio Code 搭配 C# 開發套件和相關延伸模組,例如 .NET MAUI 和 Unity。
- 在 Mac 上 VM 的 Windows 上執行的 Visual Studio。
- 在雲端 VM 中的 Windows 上執行的 Visual Studio。
如需詳細資訊,請參閱 Visual Studio for Mac 淘汰公告。
此教學課程介紹 Visual Studio for Mac 中提供的偵錯工具。
必要條件
使用偵錯組建組態
[偵錯] 與 [發行] 是 Visual Studio 的內建組建組態。 您可以使用 [偵錯] 組建組態進行偵錯,並使用 [發行] 組態進行最終發行散發。
在 [偵錯] 組態中,程式會使用完整符號偵錯資訊,在沒有最佳化的情況下進行編譯。 最佳化會使偵錯變得複雜,因為原始程式碼與產生的指令之間關係較為複雜。 程式的 [發行] 組態不包含符號偵錯資訊,而且會經過完全最佳化。
根據預設,Visual Studio for Mac 會使用 [偵錯] 組建組態,因此您不需要在偵錯之前加以變更。
啟動 Visual Studio for Mac。
開啟您在使用 Visual Studio for Mac 建立 .NET 主控台應用程式 (部分機器翻譯) 中建立的專案。
目前的組建組態會顯示在工具列上。 下列工具列影像顯示 Visual Studio 已設定為編譯 [偵錯] 版本的應用程式:
設定中斷點
「中斷點」會在含有中斷點的行執行「之前」,暫時中斷應用程式的執行。
在顯示名稱、日期與時間的行上設定中斷點。 方法是,將游標放在程式碼中,然後按 ⌘\ (command+\)。 設定中斷點的另一種方式是從功能表選取 [偵錯]>[切換中斷點]。
Visual Studio 會以醒目提示並在左邊界顯示一個紅點的方式,指出已設定中斷點的行。
按 ⌘↵ (command+enter),以便在偵錯模式下啟動程式。 開始偵錯的另一種方式是從功能表選擇 [偵錯]>[開始偵錯]。
當程式提示輸入名稱時,在終端機視窗中輸入字串,然後按 enter。
程式會在到達中斷點並在
Console.WriteLine
方法執行之前,停止執行。
使用 [即時運算] 視窗
[即時運算] 視窗可讓您與正在進行偵錯的應用程式互動。 您可以使用互動方式變更變數的值,以了解其如何影響我們的程式。
如果看不到 [即時運算] 視窗,選擇 [檢視]>[偵錯視窗]>[即時運算] 即可顯示。
在 [即時運算] 視窗中輸入
name = "Gracie"
,然後按 enter。在 [即時運算] 視窗中輸入
currentDate = currentDate.AddDays(1)
,然後按 enter。[即時運算] 視窗隨即顯示字串變數的值與 DateTime 值的屬性。
[區域變數] 視窗會顯示目前正在執行的方法中所定義變數的值。 您剛才變更的變數值會在 [區域變數] 視窗中更新。
按⌘↵ (command+enter) 以繼續偵錯。
終端機中顯示的值會對應到您在 [即時運算] 視窗中所做的變更。
如果您沒有看到 [終端機],請選取底部導覽列中的 [終端機 - HelloWorld]。
按任意鍵以結束該程式。
關閉終端機視窗。
設定條件式中斷點
程式會顯示使用者輸入的字串。 如果使用者未進行任何輸入時,會發生什麼情況? 您可以使用稱為「條件式中斷點」的實用偵錯功能來測試此功能。
在代表中斷點的紅點上按 ctrl + 滑鼠鍵。 在操作功能表中,選取 [編輯中斷點]。
在 [編輯中斷點] 對話方塊中,於 [且下列條件為 true] 後的欄位中輸入下列程式碼,然後選取 [套用]。
String.IsNullOrEmpty(name)
每次叫用中斷點時,偵錯工具都會呼叫
String.IsNullOrEmpty(name)
方法,而且只有在方法呼叫傳回true
時,才會在此行中斷。不要指定條件運算式,您可以改為指定「叫用計數」,這會在陳述式執行指定的次數之前中斷程式執行。
按 ⌘↵ (command+enter) 以開始偵錯。
當系統提示您輸入您的名稱時,在終端機視窗中,按 enter。
由於已經滿足您指定的條件 (
name
是null
或 String.Empty),因此程式會在到達中斷點時停止執行。選取 [區域變數] 視窗,此視窗會顯示目前正在執行之方法的區域變數值。 在此情況下,
Main
是目前正在執行的方法。 請注意name
變數的值是""
,亦即 String.Empty。您也可以在 [即時運算] 視窗中輸入
name
變數名稱,然後按 enter,即可看到此值是空字串。按⌘↵ (command+enter) 以繼續偵錯。
在終端機視窗中,按任意鍵以結束程式。
關閉終端機視窗。
按一下程式碼視窗左邊界的紅點,以清除中斷點。 清除中斷點的另一種方式是在選取程式碼時選擇 [偵錯]>[切換中斷點]。
逐步執行程式
Visual Studio 也可讓您逐行執行程式並監視其執行情況。 通常,您會設定中斷點,然後透過您程式碼的一小部分來追蹤程式流程。 此程式相當小,因此您可以逐步執行整個程式。
在標示
Main
方法起始處的大括弧上設定中斷點 (按 command+\)。按 ⌘↵ (command+enter) 以開始偵錯。
Visual Studio 會停在具有中斷點的行上。
按 ⇧⌘I (shift+command+I) 或選取 [偵錯]>[逐步執行] 以前進一行。
Visual Studio 會醒目提示要執行的下一行,並在該行旁邊顯示一個箭頭。
此時,[區域變數] 視窗會顯示
args
陣列是空的,而且name
與currentDate
有預設值。 此外,Visual Studio 已開啟一個空白終端機。按 ⇧⌘I (shift+command+I)。
Visual Studio 會醒目提示包含
name
變數指派的陳述式。 [區域變數] 視窗會顯示name
是null
,而終端機則會顯示 "What is your name?" 字串。在主控台視窗中輸入一個字串並按 enter,以回應提示。
按 ⇧⌘I (shift+command+I)。
Visual Studio 會醒目提示包含
currentDate
變數指派的陳述式。 [區域變數] 視窗會顯示對 Console.ReadLine 方法進行呼叫所傳回的值。 終端機會顯示您在提示字元中輸入的字串。按 ⇧⌘I (shift+command+I)。
[區域變數] 視窗會顯示從 DateTime.Now 屬性指派之後
currentDate
變數的值。 終端機不會變更。按 ⇧⌘I (shift+command+I)。
Visual Studio 會呼叫 Console.WriteLine(String, Object, Object) 方法。 終端機會顯示格式化的字串。
按 ⇧⌘U (shift+command+U) 或選取 [執行]>[跳出]。
終端機會顯示訊息並等候您按下按鍵。
按任意鍵以結束該程式。
使用發行組建組態
在對應用程式的偵錯版本進行測試之後,您也應該編譯並測試發行版本。 發行版本會納入編譯器最佳化,這些最佳化可能會對應用程式的行為造成負面影響。 例如,針對提升效能而設計的編譯器最佳化可能會在多執行緒應用程式中建立競爭條件。
若要建置並測試主控台應用程式的發行版本,請執行下列步驟:
將工具列上的組建組態從 [偵錯] 變更為 [發行]。
若要執行應用程式但不偵錯,請按 ⌥⌘↵ (option+command+enter)。
下一步
在此教學課程中,您已使用 Visual Studio 偵錯工具。 在下一個教學課程中,您要發佈應用程式的可部署版本。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應