教學課程:使用 Visual Studio 為 .NET 主控台應用程式偵錯
本教學課程會介紹 Visual Studio 中所提供的偵錯工具。
重要
所有鍵盤快速鍵皆依據 Visual Studio 中的預設值。 您的鍵盤快速鍵可能會有所差異,如需詳細資訊,請參閱 Visual Studio 中的鍵盤快速鍵。
必要條件
- 本教學課程適用於您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的主控台應用程式。
使用偵錯組建組態
[偵錯] 與 [發行] 是 Visual Studio 的內建組建組態。 您可以使用 [偵錯] 組建組態進行偵錯,並使用 [發行] 組態進行最終發行散發。
在 [偵錯] 組態中,程式會使用完整符號偵錯資訊,在沒有最佳化的情況下進行編譯。 最佳化會使偵錯變得複雜,因為原始程式碼與產生的指令之間關係較為複雜。 程式的 [發行] 組態不包含符號偵錯資訊,而且會經過完全最佳化。
根據預設,Visual Studio 會使用 [偵錯] 組建組態,因此您無需在偵錯之前進行變更。
啟動 Visual Studio。
開啟您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的專案。
目前的組建組態會顯示在工具列上。 下列工具列影像顯示 Visual Studio 已設定為編譯 [偵錯] 版本的應用程式:
設定中斷點
「中斷點」會在含有中斷點的行執行「之前」,暫時中斷應用程式的執行。
在顯示名稱、日期和時間的程式碼行上設定「中斷點」,方式是按一下該行的程式碼視窗左邊界。 左邊界位於行號的左邊。 您也可以使用其他方式設定中斷點:將游標放在程式碼中,然後按 F9,或從功能表列依序選擇 [偵錯]> [切換中斷點]。
如下圖所示,Visual Studio 會指出中斷點設定位置所在的程式碼行,方式是醒目提示該行並在左邊界顯示紅點。
按 F5 以偵錯模式執行程式。 開始偵錯的另一種方式是從功能表選擇 [偵錯]>[開始偵錯]。
當程式提示您輸入名稱時,在主控台視窗中輸入字串,然後按 Enter。
程式會在到達中斷點且在
Console.WriteLine
方法執行之前,停止執行。 [區域變數] 視窗會顯示目前正在執行的方法中所定義變數的值。
使用 [即時運算] 視窗
[即時運算] 視窗可讓您與正在進行偵錯的應用程式互動。 您可以使用互動方式變更變數的值,以了解其如何影響我們的程式。
若看不到 [即時運算] 視窗,請選擇 [偵錯]> [視窗]> [即時運算]。
在 [即時運算] 視窗中輸入
name = "Gracie"
,然後按 Enter 鍵。在 [即時運算] 視窗中輸入
currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()
,然後按 Enter 鍵。[即時運算] 視窗會顯示字串變數的值以及 DateTime 值的屬性。 此外,[區域變數] 視窗中會更新變數的值。
按 F5 繼續執行程式。 繼續執行的另一種方式是從功能表依序選擇 [偵錯]> [繼續]。
主控台視窗中顯示的值會對應您在 [即時運算] 視窗中所做的變更。
按任意鍵結束應用程式並停止偵錯。
設定條件式中斷點
程式會顯示使用者輸入的字串。 如果使用者未進行任何輸入時,會發生什麼情況? 您可以使用稱為「條件式中斷點」的實用偵錯功能來測試此功能。
在代表中斷點的紅點上按一下滑鼠右鍵。 在操作功能表中選取 [條件],開啟 [中斷點設定] 對話方塊。 若尚未選取 [條件] 方塊,請加以選取。
在 [條件運算式] 的部分,在欄位中輸入下列程式碼,該欄位會顯示測試
x
是否為 5 的範例程式碼。string.IsNullOrEmpty(name)
String.IsNullOrEmpty(name)
每次叫用中斷點時,偵錯工具都會呼叫
String.IsNullOrEmpty(name)
方法,而且只有在方法呼叫傳回true
時,才會在此行中斷。不要指定條件運算式,您可以改為指定「叫用計數」,這會在陳述式執行指定的次數之前中斷程式執行。 另一個作法是指定「篩選條件」,以根據執行緒識別碼、處理序名稱,或執行緒名稱等屬性來中斷程式執行。
選取 [關閉] 以關閉該對話方塊。
按 F5 啟動程式並開始偵錯。
當主控台視窗提示您輸入名稱時,按 Enter。
由於您指定的條件 (
name
為null
或 String.Empty) 已經滿足,因此程式會在到達中斷點且Console.WriteLine
方法執行之前停止執行。選取 [區域變數] 視窗,此視窗會顯示目前正在執行之方法的區域變數值。 在此情況下,
Main
是目前正在執行的方法。 注意到name
變數的值會是""
或 String.Empty。在 [即時運算] 視窗中輸入下列陳述式,然後按 Enter,以確認該值為空白字串。 結果為
true
。? name == String.Empty
? String.IsNullOrEmpty(name)
問號會指示即時運算視窗評估運算式。
按 F5 繼續執行程式。
按任意鍵關閉主控台視窗並停止偵錯。
按一下程式碼視窗左邊界中的點,清除中斷點。 您也可以使用其他方式清除中斷點:在選取程式碼時,按 F9 或選擇 [偵錯] > [切換中斷點]。
逐步執行程式
Visual Studio 也可讓您逐行執行程式並監視其執行情況。 通常,您會設定中斷點,然後透過您程式碼的一小部分來追蹤程式流程。 此程式相當小,因此您可以逐步執行整個程式。
選擇 [偵錯]> [逐步執行]。 您也可以按 F11,一次偵錯一個陳述式。
Visual Studio 會醒目提示要執行的下一行,並在該行旁邊顯示一個箭頭。
C#
Visual Basic
此時,[區域變數] 視窗會顯示
args
陣列是空的,而且name
與currentDate
有預設值。 此外,Visual Studio 已開啟一個空白主控台視窗。按下 F11。 Visual Studio 現在會醒目提示要執行的下一行。 [區域變數] 視窗會保持不變,而主控台視窗則會維持空白。
C#
Visual Basic
按下 F11。 Visual Studio 會醒目提示包含
name
變數指派的陳述式。 [區域變數] 視窗會顯示name
為null
,而主控台視窗則會顯示 "What is your name?" 字串。在主控台視窗中輸入字串,然後按 Enter,以回應提示。 主控台不會有所回應,您輸入的字串也不會顯示在主控台視窗中,但 Console.ReadLine 方法仍會擷取您的輸入。
按下 F11。 Visual Studio 會醒目提示包含
currentDate
變數指派的陳述式。 [區域變數] 視窗會顯示對 Console.ReadLine 方法進行呼叫所傳回的值。 主控台視窗也會顯示您在提示輸入的字串。按下 F11。 [區域變數] 視窗會顯示從 DateTime.Now 屬性指派之後
currentDate
變數的值。 主控台視窗沒有變更。按下 F11。 Visual Studio 會呼叫 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化的字串。
選擇 [偵錯]> [跳離函式]。您也可以按 Shift+F11 來停止逐步執行。
主控台視窗會顯示訊息並等候您按下按鍵。
按任意鍵關閉主控台視窗並停止偵錯。
使用發行組建組態
在對應用程式的偵錯版本進行測試之後,您也應該編譯並測試發行版本。 發行版本會納入編譯器最佳化,這些最佳化有時會對應用程式的行為造成負面影響。 例如,針對提升效能而設計的編譯器最佳化可能會在多執行緒應用程式中建立競爭條件。
若要組置並測試您主控台應用程式的發行版本,請將工具列上的組建組態從 [偵錯] 變更為 [發行]。
當您按 F5 或從 [建置] 功能表中選擇 [建置方案] 時,Visual Studio 即會編譯應用程式的 [發行] 版本。 您可以測試該版本,方式就與測試 [偵錯] 版本相同。
下一步
在此教學課程中,您已使用 Visual Studio 偵錯工具。 在下一個教學課程中,您要發佈應用程式的可部署版本。
本教學課程會介紹 Visual Studio 中所提供的偵錯工具。
重要
所有鍵盤快速鍵皆依據 Visual Studio 中的預設值。 您的鍵盤快速鍵可能會有所差異,如需詳細資訊,請參閱 Visual Studio 中的鍵盤快速鍵。
必要條件
- 本教學課程適用於您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的主控台應用程式。
使用偵錯組建組態
[偵錯] 與 [發行] 是 Visual Studio 的內建組建組態。 您可以使用 [偵錯] 組建組態進行偵錯,並使用 [發行] 組態進行最終發行散發。
在 [偵錯] 組態中,程式會使用完整符號偵錯資訊,在沒有最佳化的情況下進行編譯。 最佳化會使偵錯變得複雜,因為原始程式碼與產生的指令之間關係較為複雜。 程式的 [發行] 組態不包含符號偵錯資訊,而且會經過完全最佳化。
根據預設,Visual Studio 會使用 [偵錯] 組建組態,因此您無需在偵錯之前進行變更。
啟動 Visual Studio。
開啟您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的專案。
目前的組建組態會顯示在工具列上。 下列工具列影像顯示 Visual Studio 已設定為編譯 [偵錯] 版本的應用程式:
設定中斷點
「中斷點」會在含有中斷點的行執行「之前」,暫時中斷應用程式的執行。
在顯示名稱、日期和時間的程式碼行上設定「中斷點」,方式是按一下該行的程式碼視窗左邊界。 左邊界位於行號的左邊。 您也可以使用其他方式設定中斷點:將游標放在程式碼中,然後按 F9,或從功能表列依序選擇 [偵錯]> [切換中斷點]。
如下圖所示,Visual Studio 會指出中斷點設定位置所在的程式碼行,方式是醒目提示該行並在左邊界顯示紅點。
按 F5 以偵錯模式執行程式。 開始偵錯的另一種方式是從功能表選擇 [偵錯]>[開始偵錯]。
當程式提示您輸入名稱時,在主控台視窗中輸入字串,然後按 Enter。
程式會在到達中斷點且在
Console.WriteLine
方法執行之前,停止執行。 [區域變數] 視窗會顯示目前正在執行的方法中所定義變數的值。
使用 [即時運算] 視窗
[即時運算] 視窗可讓您與正在進行偵錯的應用程式互動。 您可以使用互動方式變更變數的值,以了解其如何影響我們的程式。
若看不到 [即時運算] 視窗,請選擇 [偵錯]> [視窗]> [即時運算]。
在 [即時運算] 視窗中輸入
name = "Gracie"
,然後按 Enter 鍵。在 [即時運算] 視窗中輸入
currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()
,然後按 Enter 鍵。[即時運算] 視窗會顯示字串變數的值以及 DateTime 值的屬性。 此外,[區域變數] 視窗中會更新變數的值。
按 F5 繼續執行程式。 繼續執行的另一種方式是從功能表依序選擇 [偵錯]> [繼續]。
主控台視窗中顯示的值會對應您在 [即時運算] 視窗中所做的變更。
按任意鍵結束應用程式並停止偵錯。
設定條件式中斷點
程式會顯示使用者輸入的字串。 如果使用者未進行任何輸入時,會發生什麼情況? 您可以使用稱為「條件式中斷點」的實用偵錯功能來測試此功能。
在代表中斷點的紅點上按一下滑鼠右鍵。 在操作功能表中選取 [條件],開啟 [中斷點設定] 對話方塊。 若尚未選取 [條件] 方塊,請加以選取。
在 [條件運算式] 的部分,在欄位中輸入下列程式碼,該欄位會顯示測試
x
是否為 5 的範例程式碼。string.IsNullOrEmpty(name)
String.IsNullOrEmpty(name)
每次叫用中斷點時,偵錯工具都會呼叫
String.IsNullOrEmpty(name)
方法,而且只有在方法呼叫傳回true
時,才會在此行中斷。不要指定條件運算式,您可以改為指定「叫用計數」,這會在陳述式執行指定的次數之前中斷程式執行。 另一個作法是指定「篩選條件」,以根據執行緒識別碼、處理序名稱,或執行緒名稱等屬性來中斷程式執行。
選取 [關閉] 以關閉該對話方塊。
按 F5 啟動程式並開始偵錯。
當主控台視窗提示您輸入名稱時,按 Enter。
由於您指定的條件 (
name
為null
或 String.Empty) 已經滿足,因此程式會在到達中斷點且Console.WriteLine
方法執行之前停止執行。選取 [區域變數] 視窗,此視窗會顯示目前正在執行之方法的區域變數值。 在此情況下,
Main
是目前正在執行的方法。 注意到name
變數的值會是""
或 String.Empty。在 [即時運算] 視窗中輸入下列陳述式,然後按 Enter,以確認該值為空白字串。 結果為
true
。? name == String.Empty
? String.IsNullOrEmpty(name)
問號會指示即時運算視窗評估運算式。
按 F5 繼續執行程式。
按任意鍵關閉主控台視窗並停止偵錯。
按一下程式碼視窗左邊界中的點,清除中斷點。 您也可以使用其他方式清除中斷點:在選取程式碼時,按 F9 或選擇 [偵錯] > [切換中斷點]。
逐步執行程式
Visual Studio 也可讓您逐行執行程式並監視其執行情況。 通常,您會設定中斷點,然後透過您程式碼的一小部分來追蹤程式流程。 此程式相當小,因此您可以逐步執行整個程式。
選擇 [偵錯]> [逐步執行]。 您也可以按 F11,一次偵錯一個陳述式。
Visual Studio 會醒目提示要執行的下一行,並在該行旁邊顯示一個箭頭。
C#
Visual Basic
此時,[區域變數] 視窗會顯示
args
陣列是空的,而且name
與currentDate
有預設值。 此外,Visual Studio 已開啟一個空白主控台視窗。按下 F11。 Visual Studio 現在會醒目提示要執行的下一行。 [區域變數] 視窗會保持不變,而主控台視窗則會維持空白。
C#
Visual Basic
按下 F11。 Visual Studio 會醒目提示包含
name
變數指派的陳述式。 [區域變數] 視窗會顯示name
為null
,而主控台視窗則會顯示 "What is your name?" 字串。在主控台視窗中輸入字串,然後按 Enter,以回應提示。 主控台不會有所回應,您輸入的字串也不會顯示在主控台視窗中,但 Console.ReadLine 方法仍會擷取您的輸入。
按下 F11。 Visual Studio 會醒目提示包含
currentDate
變數指派的陳述式。 [區域變數] 視窗會顯示對 Console.ReadLine 方法進行呼叫所傳回的值。 主控台視窗也會顯示您在提示輸入的字串。按下 F11。 [區域變數] 視窗會顯示從 DateTime.Now 屬性指派之後
currentDate
變數的值。 主控台視窗沒有變更。按下 F11。 Visual Studio 會呼叫 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化的字串。
選擇 [偵錯]> [跳離函式]。您也可以按 Shift+F11 來停止逐步執行。
主控台視窗會顯示訊息並等候您按下按鍵。
按任意鍵關閉主控台視窗並停止偵錯。
使用發行組建組態
在對應用程式的偵錯版本進行測試之後,您也應該編譯並測試發行版本。 發行版本會納入編譯器最佳化,這些最佳化有時會對應用程式的行為造成負面影響。 例如,針對提升效能而設計的編譯器最佳化可能會在多執行緒應用程式中建立競爭條件。
若要組置並測試您主控台應用程式的發行版本,請將工具列上的組建組態從 [偵錯] 變更為 [發行]。
當您按 F5 或從 [建置] 功能表中選擇 [建置方案] 時,Visual Studio 即會編譯應用程式的 [發行] 版本。 您可以測試該版本,方式就與測試 [偵錯] 版本相同。
下一步
在此教學課程中,您已使用 Visual Studio 偵錯工具。 在下一個教學課程中,您要發佈應用程式的可部署版本。
本教學課程會介紹 Visual Studio 中所提供的偵錯工具。
必要條件
- 本教學課程適用於您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的主控台應用程式。
使用偵錯組建組態
[偵錯] 與 [發行] 是 Visual Studio 的內建組建組態。 您可以使用 [偵錯] 組建組態進行偵錯,並使用 [發行] 組態進行最終發行散發。
在 [偵錯] 組態中,程式會使用完整符號偵錯資訊,在沒有最佳化的情況下進行編譯。 最佳化會使偵錯變得複雜,因為原始程式碼與產生的指令之間關係較為複雜。 程式的 [發行] 組態不包含符號偵錯資訊,而且會經過完全最佳化。
根據預設,Visual Studio 會使用 [偵錯] 組建組態,因此您無需在偵錯之前進行變更。
啟動 Visual Studio。
開啟您在「使用 Visual Studio 建立 .NET 主控台應用程式」中所建立的專案。
目前的組建組態會顯示在工具列上。 下列工具列影像顯示 Visual Studio 已設定為編譯 [偵錯] 版本的應用程式:
設定中斷點
「中斷點」會在含有中斷點的行執行「之前」,暫時中斷應用程式的執行。
在顯示名稱、日期和時間的程式碼行上設定「中斷點」,方式是按一下該行的程式碼視窗左邊界。 左邊界位於行號的左邊。 您也可以使用其他方式設定中斷點:將游標放在程式碼中,然後按 F9,或從功能表列依序選擇 [偵錯]> [切換中斷點]。
如下圖所示,Visual Studio 會指出中斷點設定位置所在的程式碼行,方式是醒目提示該行並在左邊界顯示紅點。
按 F5 以偵錯模式執行程式。 開始偵錯的另一種方式是從功能表選擇 [偵錯]>[開始偵錯]。
當程式提示您輸入名稱時,在主控台視窗中輸入字串,然後按 Enter。
程式會在到達中斷點且在
Console.WriteLine
方法執行之前,停止執行。 [區域變數] 視窗會顯示目前正在執行的方法中所定義變數的值。
使用 [即時運算] 視窗
[即時運算] 視窗可讓您與正在進行偵錯的應用程式互動。 您可以使用互動方式變更變數的值,以了解其如何影響我們的程式。
若看不到 [即時運算] 視窗,請選擇 [偵錯]> [視窗]> [即時運算]。
在 [即時運算] 視窗中輸入
name = "Gracie"
,然後按 Enter 鍵。在 [即時運算] 視窗中輸入
currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()
,然後按 Enter 鍵。[即時運算] 視窗會顯示字串變數的值以及 DateTime 值的屬性。 此外,[區域變數] 視窗中會更新變數的值。
按 F5 繼續執行程式。 繼續執行的另一種方式是從功能表依序選擇 [偵錯]> [繼續]。
主控台視窗中顯示的值會對應您在 [即時運算] 視窗中所做的變更。
按任意鍵結束應用程式並停止偵錯。
設定條件式中斷點
程式會顯示使用者輸入的字串。 如果使用者未進行任何輸入時,會發生什麼情況? 您可以使用稱為「條件式中斷點」的實用偵錯功能來測試此功能。
在代表中斷點的紅點上按一下滑鼠右鍵。 在操作功能表中選取 [條件],開啟 [中斷點設定] 對話方塊。 若尚未選取 [條件] 方塊,請加以選取。
在 [條件運算式] 的部分,在欄位中輸入下列程式碼,該欄位會顯示測試
x
是否為 5 的範例程式碼。String.IsNullOrEmpty(name)
String.IsNullOrEmpty(name)
每次叫用中斷點時,偵錯工具都會呼叫
String.IsNullOrEmpty(name)
方法,而且只有在方法呼叫傳回true
時,才會在此行中斷。不要指定條件運算式,您可以改為指定「叫用計數」,這會在陳述式執行指定的次數之前中斷程式執行。 另一個作法是指定「篩選條件」,以根據執行緒識別碼、處理序名稱,或執行緒名稱等屬性來中斷程式執行。
選取 [關閉] 以關閉該對話方塊。
按 F5 啟動程式並開始偵錯。
當主控台視窗提示您輸入名稱時,按 Enter。
由於您指定的條件 (
name
為null
或 String.Empty) 已經滿足,因此程式會在到達中斷點且Console.WriteLine
方法執行之前停止執行。選取 [區域變數] 視窗,此視窗會顯示目前正在執行之方法的區域變數值。 在此情況下,
Main
是目前正在執行的方法。 注意到name
變數的值會是""
或 String.Empty。在 [即時運算] 視窗中輸入下列陳述式,然後按 Enter,以確認該值為空白字串。 結果為
true
。? name == String.Empty
? String.IsNullOrEmpty(name)
問號會指示即時運算視窗評估運算式。
按 F5 繼續執行程式。
按任意鍵關閉主控台視窗並停止偵錯。
按一下程式碼視窗左邊界中的點,清除中斷點。 您也可以使用其他方式清除中斷點:在選取程式碼時,按 F9 或選擇 [偵錯] > [切換中斷點]。
逐步執行程式
Visual Studio 也可讓您逐行執行程式並監視其執行情況。 通常,您會設定中斷點,然後透過您程式碼的一小部分來追蹤程式流程。 此程式相當小,因此您可以逐步執行整個程式。 當目前未在進行偵錯,且焦點位於 Visual Studio 時:
選擇 [偵錯]> [逐步執行]。 您也可以按 F11,一次偵錯一個陳述式。
Visual Studio 會醒目提示要執行的下一行,並在該行旁邊顯示一個箭頭。
C#
Visual Basic
此時,[區域變數] 視窗會顯示
args
陣列是空的,而且name
與currentDate
有預設值。 此外,Visual Studio 已開啟一個空白主控台視窗。按下 F11。 Visual Studio 現在會醒目提示要執行的下一行。 [區域變數] 視窗會保持不變,而主控台視窗則會維持空白。
C#
Visual Basic
按下 F11。 Visual Studio 會醒目提示包含
name
變數指派的陳述式。 [區域變數] 視窗會顯示name
為null
,而主控台視窗則會顯示 "What is your name?" 字串。在主控台視窗中輸入字串,然後按 Enter,以回應提示。 主控台不會有所回應,您輸入的字串也不會顯示在主控台視窗中,但 Console.ReadLine 方法仍會擷取您的輸入。
按下 F11。 Visual Studio 會醒目提示包含
currentDate
變數指派的陳述式。 [區域變數] 視窗會顯示對 Console.ReadLine 方法進行呼叫所傳回的值。 主控台視窗也會顯示您在提示輸入的字串。按下 F11。 [區域變數] 視窗會顯示從 DateTime.Now 屬性指派之後
currentDate
變數的值。 主控台視窗沒有變更。按下 F11。 Visual Studio 會呼叫 Console.WriteLine(String, Object, Object) 方法。 主控台視窗會顯示格式化的字串。
選擇 [偵錯]> [跳離函式]。您也可以按 Shift+F11 來停止逐步執行。
主控台視窗會顯示訊息並等候您按下按鍵。
按任意鍵關閉主控台視窗並停止偵錯。
使用發行組建組態
在對應用程式的偵錯版本進行測試之後,您也應該編譯並測試發行版本。 發行版本會納入編譯器最佳化,這些最佳化有時會對應用程式的行為造成負面影響。 例如,針對提升效能而設計的編譯器最佳化可能會在多執行緒應用程式中建立競爭條件。
若要組置並測試您主控台應用程式的發行版本,請將工具列上的組建組態從 [偵錯] 變更為 [發行]。
當您按 F5 或從 [建置] 功能表中選擇 [建置方案] 時,Visual Studio 即會編譯應用程式的 [發行] 版本。 您可以測試該版本,方式就與測試 [偵錯] 版本相同。
下一步
在此教學課程中,您已使用 Visual Studio 偵錯工具。 在下一個教學課程中,您要發佈應用程式的可部署版本。