Visual Studio 包含一組功能強大的整合式專案建置和偵錯工具。 本文說明 Visual Studio 如何使用建置輸出、程式代碼分析、偵錯工具和單元測試,協助您在程式碼中找出問題。
您已了解編輯器,並建立了一些程序代碼。 現在,您想要確定程式代碼正常運作。 在 Visual Studio 中,與大多數 IDE 一樣,有兩個階段可讓程式代碼運作:建置程式代碼來攔截和解決專案和編譯程式錯誤,以及執行程式代碼來尋找運行時間和動態錯誤。
建置您的程式碼
組建組態有兩種基本類型: 偵錯 和 發行。 偵錯 組態會產生較慢且較大的可執行檔,以提供更豐富的互動式偵錯運行體驗。 偵 錯 可執行文件絕對不應該出貨。 發行組態會建置更快速且優化的可執行文件,適合寄送(至少從編譯程序的觀點來看)。 默認組建組態為 [偵錯]。
建置專案最簡單的方式是按 F7,但您也可以從主選單中選取 [建>置方案] 來啟動組建。
您可以在 Visual Studio UI 底部的 [ 輸出 ] 視窗中觀察建置程式(使用者介面)。 錯誤、警告和建置作業會顯示在這裡。 如果您有錯誤(或您在設定層級上方有警告),則組建會失敗。 您可以選取錯誤和警告,以移至發生錯誤的行。 再次按 F7 來重建您的專案(只重新編譯有錯誤的檔案)或 Ctrl+Alt+F7 (用於全新且完整的重建)。
編輯器下方的結果視窗中有兩個索引標籤視窗: [輸出 ] 視窗,其中包含原始編譯程序輸出(包括錯誤訊息):和 [ 錯誤清單 ] 視窗,提供所有錯誤和警告的可排序和可篩選清單。
建置成功時,您會在 [ 輸出 ] 視窗中看到如下的結果:
檢閱錯誤清單
除非您尚未修改您先前且成功編譯的程式代碼,否則可能會發生錯誤。 如果您是編碼新手,您可能有許多問題。 錯誤有時很明顯,例如簡單的語法錯誤或不正確的變數名稱,有時很難理解,只有一個神秘的程式代碼可引導您。 如需問題的更清楚檢視,請流覽至 [建置 輸出 ] 視窗底部,然後選取 [ 錯誤清單 ] 索引標籤。此動作會帶您更組織地檢視項目的錯誤和警告,併為您提供一些額外的選項。
在 [ 錯誤清單 ] 視窗中選取錯誤行,以跳至發生錯誤的行。 (或按Ctrl+Q開啟行號,輸入行號,然後從結果中選擇開啟或關閉行號。這是最快的方式進入選項對話框,您可以在其中開啟行號。)
按 Ctrl+G 快速跳至發生錯誤的行號。
Visual Studio 會以紅色「波浪線」底線識別此錯誤。 將滑鼠停留在它上方以取得更多詳細數據。 解決問題後,問題將會消失;然而,您在修正過程中可能會引入新的錯誤。 (此動作稱為「回歸」。
逐步查閱錯誤清單,並解決程式代碼中的所有錯誤。
詳細檢視錯誤
許多錯誤可能對您來說不容易理解,因為它們是用編譯器特有的術語表達的。 在這些情況下,您可能需要其他資訊。 從 [ 錯誤清單 ] 視窗中,您可以執行自動 Bing 搜尋錯誤或警告的詳細資訊。 以滑鼠右鍵按鍵單擊對應的項目行,然後從內容功能表中選取 [顯示錯誤說明],或在 [錯誤清單] 的 [代碼 資料行中選取超連結的錯誤代碼。
根據您的設定,您的網頁瀏覽器會顯示錯誤碼和文字的搜尋結果,或在 Visual Studio 內開啟索引標籤,並顯示 Bing 搜尋的結果。 結果來自網路上的許多不同來源,而且您可能不會覺得所有結果都一定有幫助。
使用程式碼分析
程式代碼分析器會尋找可能導致運行時間錯誤或程式代碼管理問題常見的程式碼問題。
C# 和 Visual Basic 程式代碼分析
Visual Studio 包含一組內建 的 .NET 編譯程式平臺分析器 ,可檢查您輸入的 C# 和 Visual Basic 程式代碼。 您可以將更多分析器安裝為 Visual Studio 擴充功能,或安裝為 NuGet 套件。 如果發現規則違反,錯誤會在錯誤清單中報告,並在程式碼編輯器中以波浪線標示出錯的程式碼。
C++ 程式碼分析
若要分析C++程序代碼,請執行 靜態程序代碼分析。 在您清除防止成功建置的明顯錯誤后,請習慣執行它,並花一些時間來解決它可能產生的警告。 您可以避免將來一些麻煩,並可能學習一些程式碼風格技巧。
按 Alt+F11 (或從頂端選單選取 [ 分析>對方案進行程式碼分析 ] 以啟動靜態程式碼分析。
任何新的或更新的警告都會出現在 IDE 底部的 [ 錯誤清單 ] 索引標籤中。 選取警告以在程式碼中跳至相關位置。
使用快速動作來修正或重構程序代碼
快速動作可從燈泡或螺絲起子圖示取得,讓您可以在程式碼中進行內嵌重構。 這是在 C#、C++和 Visual Basic 程式代碼中快速有效地修正常見警告的簡單方法。 若要存取它們,請以滑鼠右鍵按兩下警告波浪線,然後選取 [ 快速動作和重構]。 或者,當您的游標位於色彩波浪線的行上時,請按 Ctrl+鍵,或選取邊界中的燈泡、錯誤燈泡或螺絲起子圖示。 Visual Studio 接著會顯示您可以套用至該行程式代碼的可能修正或重構清單。
只要程式代碼分析器判斷有機會修正、重構或改善程序代碼,就可以使用快速動作。 選取任何一行程式碼,滑鼠右鍵點擊以開啟快顯選單,然後選取快速動作和重構。 如果重構或改進選項可用,則會顯示它們。 否則, 此處沒有可用的快速動作 訊息會顯示在IDE的左下角。
有了經驗,您可以快速使用箭頭鍵和 Ctrl+。 以檢查簡單的重構機會並清理您的程式碼!
執行程式碼整理
Visual Studio 會透過編輯器底部的 [程序代碼清除] 按鈕,提供 C# 程式代碼檔案的隨選格式設定,包括程式代碼樣式喜好設定。
除了將檔案格式化為空格、縮排等等, 程式代碼清除 也會套用您定義的一組程式代碼樣式慣例。 每個程式代碼樣式的喜好設定會從 EditorConfig 檔案讀取(如果您有該專案的檔案),或者從 [選項] 對話框中的 程式代碼樣式設定 中讀取。
對執行中的程式代碼進行偵錯
既然您已成功建置代碼並執行一些清理,請按 F5 或選取 偵錯>開始偵錯 來執行它。 此動作會在偵錯環境中啟動您的應用程式,讓您可以詳細觀察其行為。 當您的應用程式執行時,Visual Studio IDE 會有所變更: 輸出 視窗會被兩個新的視窗取代(在默認視窗配置中),分別是 自動/區域/監看 標籤式視窗和 呼叫堆疊/斷點/例外設定/輸出 標籤式視窗。 這些視窗有多個索引標籤,可讓您在應用程式執行時檢查及評估應用程式的變數、線程、呼叫堆疊和其他行為。
Visual Studio "即時運算"和"呼叫堆疊"視窗的螢幕快照。
按 Shift+F5 或點擊 Stop 按鈕以停止應用程式。 或者,您可以關閉應用程式的主視窗(或命令行對話框)。
如果您的程式碼完全如預期般執行,恭喜! 不過,有時候您的程式代碼可能會停止響應或當機,或為您提供一些奇怪的結果。 如果是,您應該嘗試尋找這些問題的來源,並修正錯誤。
設定簡單的斷點
斷點 是可靠偵錯最基本且重要的功能。 斷點指向 Visual Studio 應暫停正在執行的程式碼的位置,以便查看變數的值、記憶體的動作,或程式碼的分支是否正在執行。 設定和移除斷點之後,您不需要重建專案。
在您希望發生斷點的行的左側或右側邊界點擊一下,或按 F9 在目前程式代碼行上來設定斷點。 當您執行程式碼時,它會在這行程式碼的指示執行前先暫停(或中斷)。
斷點的常見用法包括:
若要縮小當機或無回應程式的來源範圍,請在您認為造成失敗的方法呼叫程式代碼前後散佈斷點。 當您在調試器中執行程式碼時,請移除並重設斷點讓它們更靠近,直到您找到引起問題的程式碼行為止。 請參閱下一節,以瞭解如何在調試程式中執行程序代碼。
當您介紹新程式代碼時,請在其開頭設定斷點,並執行程式碼以確定其行為如預期般運作。
如果您已實作複雜的行為,請設定演算法程式代碼的斷點,以便在程式中斷時檢查變數和數據的值。
如果您要撰寫 C 或C++程式代碼,請使用斷點來停止程序代碼,以便在偵錯記憶體相關失敗時檢查位址值(尋找 NULL)和參考計數。
如需使用斷點的詳細資訊,請參閱 在Visual Studio調試程式中使用斷點。
在運行時間檢查您的程序代碼
當您的程式碼執行達到斷點並暫停時,標示為黃色的程式碼行(目前執行的語句)尚未執行。 此時,您可能想要執行目前的語句,然後檢查變更的值。 您可以使用數 個步驟 命令在除錯程式中執行程式代碼。 如果標示的程式代碼是方法呼叫,您可以按 F11 進入。 您也可以按 F10 來逐行執行這行程式碼。 如需進一步了解如何逐步執行程式碼的命令和詳細資訊,請參閱 使用調試工具瀏覽程式碼。
在上圖中,您可以按 F10 或 F11 來推進調試程式一個語句(因為這裡沒有方法呼叫,所以這兩個命令都有相同的結果)。
當調試程序暫停時,您可以檢查變數並呼叫堆疊,以判斷發生了什麼事。 這些值符合您所預期的範圍嗎? 呼叫是否依正確的順序進行?
將滑鼠停留在變數上,以查看其目前的值和參考。 如果您看到您沒預期的值,則可能在上述或呼叫程式代碼中有錯誤。 若要深入瞭解,請參閱 初探 Visual Studio 偵錯工具。
此外,Visual Studio 會顯示 [診斷工具] 視窗,您可以在其中觀察應用程式一段時間的 CPU 和記憶體使用量。 稍後在應用程式開發中,您可以使用這些工具來尋找非預期的大量 CPU 使用量或記憶體配置。 將它與 監看 視窗和斷點搭配使用,以判斷造成非預期的高使用量或未釋放的資源。 如需詳細資訊,請參閱檢視分析工具概要(C#、Visual Basic、C++、F#)。
執行單元測試
單元測試是您針對程式代碼 Bug 的第一道防線,因為正確完成時,它們會測試單一「單元」的程式代碼,通常是單一函式,而且比完整程式更容易偵錯。 Visual Studio 會安裝 Microsoft 受控和原生程式碼的單元測試架構。 使用單元測試架構來建立單元測試、執行單元測試,以及報告這些測試的結果。 當您進行變更時重新執行單元測試,以測試您的程式代碼仍然正常運作。 使用 Visual Studio Enterprise 版本,您可以在每次建置之後自動執行測試。
開始時,請閱讀 使用 IntelliTest 為模糊測試產生單元測試。
若要深入瞭解 Visual Studio 中的單元測試,以及如何協助您建立更好的品質程式代碼,請參閱 單元測試基本概念。