使用 Visual Studio 調試程式瀏覽程式代碼
Visual Studio 調試程式可協助您巡覽程式代碼來檢查應用程式的狀態,並顯示其執行流程,也稱為 程式代碼逐步執行。 您可以使用鍵盤快捷方式、偵錯命令、斷點和其他功能,快速取得您想要檢查的程序代碼。 透過更熟悉調試程序導覽命令和快捷方式,您可以更快且更輕鬆地找到並解決應用程式問題。 如需與程式代碼瀏覽和偵錯相關的最常見鍵盤快捷方式清單,請參閱鍵盤快捷方式中的 偵錯 一節。
開始偵錯並進入中斷模式
某些瀏覽命令會啟動您的應用程式,並自動附加調試程式。 您的應用程式會根據您用來開始瀏覽的命令,在特定程式代碼行上暫停,而您輸入 中斷模式(也就是您的應用程式在調試程式中暫停)。
在中斷模式中,當函式、變數和物件保留在記憶體中時,應用程式執行會暫停。 當除錯程式處於中斷模式時,您可以瀏覽程式代碼。 快速進入中斷模式有兩種非常常見的方式:
設定斷點 並啟動您的應用程式。
-
例如,在 Visual Studio 的程式碼編輯器中,您可以使用 執行至游標 命令來啟動應用程式,並附加偵錯工具,然後進入暫停模式。 然後,您可以使用步驟命令來巡覽程序代碼。
程式碼逐步執行 命令可以用來啟動應用程式,但通常在進入中斷模式後更常使用。
在中斷模式中瀏覽程式代碼
某些瀏覽命令大部分是在中斷模式中使用(也就是,當您在調試程式中暫停時)。
偵錯和中斷模式
處於中斷模式時,您可以使用各種命令來巡覽程序代碼。 您可以檢查變數的值,以尋找錯誤或 Bug。 針對某些項目類型,您也可以在中斷模式時調整應用程式。
大部分的調試程序視窗,例如 模組 和 監看式 視窗,只有在調試程式附加至您的應用程式時才能使用。 某些調試程式功能,例如在 [局部變數] 視窗中檢視變數值或在 [監看] 視窗中評估表達式,只有在調試程序暫停(即中斷模式)時才能使用。
注意
如果您進入未載入原始檔或符號檔(.pdb)的程式碼,調試器會顯示 找不到原始檔 或 找不到符號檔 頁面,以協助您尋找和載入檔案。 請參閱 指定符號 (.pdb) 和原始程式檔。 如果您無法載入符號或來源檔案,您仍然可以在 [反組譯] 視窗中偵錯組合語言指令。
程序代碼逐步執行
程式碼步進 是指在附加調試程式的情況下,一次執行應用程式程式碼一個語句。 調試程式步驟命令可協助您觀察每個語句的效果,並深入瞭解其執行流程。
進入程式碼
若要在偵錯時在每個語句上停止,請使用 Debug>Step Into,或選取 F11。
偵錯工具會逐步執行程式碼中的語句,而不是實體行。 例如,if
子句可以寫在一行上:
當您進入這一行時,除錯工具會將條件視為一個步驟,將結果視為另一個步驟。 在上述範例中,條件是正確的。
當呼叫巢狀函式時,進入 最深入的巢狀函式。 例如,如果您在呼叫中使用 進入,例如 Func1(Func2())
,調試程式會進入函式 Func2
。
提示
當您執行每一行程式代碼時,您可以將滑鼠停留在變數上以查看其值,或使用 局部變數,並 監看 視窗來監看值變更。 您也可以在深入函式時,以可視化方式追蹤 呼叫堆疊。 (僅適用於 Visual Studio Enterprise,請參閱偵錯 時,在呼叫堆棧上對應方法。
調試程式碼並跳過某些函式
在除錯時,您可能不太關心某個功能。 或者,您可能知道某些程式碼的運作方式,例如經過良好測試的連結庫程序代碼。 您可以使用下列命令在單步執行程式碼時略過程式碼。 函式仍會執行,但調試程式會略過它們。
鍵盤命令 | 除錯選單命令 | 描述 |
---|---|---|
F10 | 逐步執行 | 如果當前行包含函數調用,略過 會執行程式碼,然後在呼叫的函數返回後的第一行程式碼暫停執行。 |
Shift+F11 | 逐步退出 | Step Out 會繼續執行程式代碼,並在目前的函式傳回時暫停執行。 偵錯工具會跳過目前的函式。 |
執行至特定位置或功能
當您知道您想要檢查的程式代碼或知道要從何處開始偵錯時,您可能會偏好直接執行至特定位置或函式。
- 如果您認為您可能想要重複使用斷點,最好先設定斷點。
- 其他方法是為了方便起見,而且類似於設定暫時斷點。
在程式代碼中執行至斷點
若要在程式代碼中設定簡單的斷點,請選取您要暫停執行的程式代碼行旁的極左邊界。 您也可以選擇這一行,然後選取 F9,選取 [偵錯]>[切換斷點],或以滑鼠右鍵按下並選取 [斷點],>[插入斷點]。 斷點會顯示為程式代碼行旁左邊界的紅點。 偵錯器會在這行執行之前暫停執行。
Visual Studio 中的斷點提供一組豐富的功能,例如條件斷點和追蹤點。 如需詳細資訊,請參閱 使用斷點。
執行至函式斷點
您可以將調試程式設定為執行,直到它到達指定的函式為止。 您可以依名稱指定函式,也可以從呼叫堆疊中選擇函式。
若要依名稱指定函式斷點:
選取 偵錯>新增斷點>函式斷點。
在 新增函式斷點 對話方塊中,輸入函式名稱並選擇其語言:
選取 [確定] 。
如果函式重載或位於多個命名空間中,您可以在 斷點 視窗中選擇想要的函式:
若要從呼叫堆疊選取函式斷點:
偵錯時,選取 [偵錯 >Windows>呼叫堆棧],以開啟 [呼叫堆棧] 視窗。
在 [呼叫堆棧] 視窗中,以滑鼠右鍵按兩下函式,然後選取 [執行至數據指標 ],或選取 ctrl +F10Ctrl。
如需以視覺化方式追蹤呼叫堆疊的資訊,請參閱在偵錯時 呼叫堆疊上的 Map 方法。
執行至游標位置
若要執行到游標位置,請在原始程式碼或 呼叫堆疊 視窗中,選取您要中斷的行,然後按滑鼠右鍵,選取 [執行到游標],或選取 Ctrl+F10。 選取 [執行至游標] 類似於設定 暫存斷點。
強制將程式執行到游標位置
若要執行至游標位置,請在原始程式碼或 呼叫堆疊 視窗中,選取要中斷的行,然後按滑鼠右鍵,選取 [強制執行至游標]。 選取 [強制執行至光標] 會略過任何斷點和第一次機會例外,直到偵錯工具到達游標所在的程式碼行為止。
執行點擊
當調試程序暫停時,您可以將滑鼠停留在原始程式碼中的語句或 反組譯碼 視窗中,然後選取 [執行執行] 到此處, 綠色箭號。 使用 Run to Click 類似於設定 暫存斷點。
注意
在 Visual Studio 2017 開始提供的 Run to Click 功能。
強制執行以點擊
當調試程序暫停時,您可以按下 Shift 鍵,同時將滑鼠懸停在原始程式碼語句上,然後選取 強制執行到此處(雙綠色箭頭)。 當您選擇此選項時,應用程式會附加Visual Studio調試程式,並在游標位置暫停。 執行期間遇到的任何斷點或首次例外都會被暫時停用。
備註
從 Visual Studio 2022 開始,強制執行到點擊 功能可用。
手動中斷程序代碼
若要中斷執行中應用程式中的下一行程式代碼,請選取 [偵錯]>[全部中斷],或 選取 [ctrl+Alt+Break]。
對非使用者程式代碼進行偵錯
根據預設,調試程式會藉由啟用名為 Just My Code的設定,只嘗試偵錯您的應用程式程序代碼。 如需此功能如何適用於各種項目類型和語言,以及如何自定義此功能的詳細資訊,請參閱 Just My Code。
若要在偵錯時查看架構程序代碼、第三方連結庫程式碼或系統呼叫,您可以停用 Just My Code。 在 [工具] [或 偵錯] >>[選項] 中,清除 [啟用 Just My Code] 複選框。 停用 Just My Code 時,非使用者程式代碼會出現在除錯程式視窗中,而調試程式可以逐步執行非使用者程式代碼。
注意
裝置專案不支援 Just My Code。
偵錯系統程序代碼
如果您已載入 Microsoft 系統代碼的偵錯符號並停用 Just My Code,您可以像進行其他呼叫一樣步入系統呼叫。
從 Visual Studio 2022 17.7 版開始,您在逐步執行外部程式碼時,可以自動反編譯 .NET 程式碼,而不需要手動載入偵錯符號。 如需詳細資訊,請參閱 在偵錯時,從 .NET 元件產生原始程式碼。
若要瞭解如何載入Microsoft符號,請參閱 設定符號檔案的位置和載入選項。
若要載入特定系統元件的符號:
在您偵錯時,選擇 偵錯>Windows>模組,或按 Ctrl+Alt+U,以開啟 模組 視窗。
在 [模組] 視窗中,您可以告訴哪些模組在 [符號狀態] 數據行中載入了符號。 以滑鼠右鍵按下您要載入符號的模組,然後選取載入符號。
進入 Managed 程式代碼中的屬性和運算子
調試器預設會略過執行管理程式碼中的屬性和運算子。 在大部分情況下,此行為可提供更佳的偵錯體驗。 若要啟用逐步執行屬性或運算子,請選取 [偵錯]>[選項]。 在 [偵錯>一般] 頁面上,清除 [步過屬性與運算子(僅限管理)] 複選框。
移動指標以變更執行流程
您可以移動黃色執行指標來變更將執行的下一個語句。 您可以在中斷模式中使用此功能。
這是進階調試程式功能。 如需詳細資訊,請參閱 移動執行指標。