共用方式為


使用 Visual Studio 調試程式瀏覽程式代碼

Visual Studio 調試程式可協助您巡覽程式代碼來檢查應用程式的狀態,並顯示其執行流程,也稱為 程式代碼逐步執行。 您可以使用鍵盤快捷方式、偵錯命令、斷點和其他功能,快速取得您想要檢查的程序代碼。 透過更熟悉調試程序導覽命令和快捷方式,您可以更快且更輕鬆地找到並解決應用程式問題。 如需與程式代碼瀏覽和偵錯相關的最常見鍵盤快捷方式清單,請參閱鍵盤快捷方式中的 偵錯 一節。

注意

如果您不熟悉偵錯程式代碼,建議您先閱讀 偵錯絕對初學者偵錯技術和 工具,再閱讀本文。

開始偵錯並進入中斷模式

某些瀏覽命令會啟動您的應用程式,並自動附加調試程式。 您的應用程式會根據您用來開始瀏覽的命令,在特定程式代碼行上暫停,而您輸入 中斷模式(也就是您的應用程式在調試程式中暫停)。

在中斷模式中,當函式、變數和物件保留在記憶體中時,應用程式執行會暫停。 當除錯程式處於中斷模式時,您可以瀏覽程式代碼。 快速進入休息模式的常見方法有兩種:

  • 設定斷點 並啟動您的應用程式。

  • 執行至特定位置或函式

    例如,在 Visual Studio 的程式碼編輯器中,您可以使用 執行至游標 命令來啟動應用程式,並附加偵錯工具,然後進入暫停模式。 然後,您可以使用步驟命令來巡覽程序代碼。

    顯示選取執行到游標和 F11 的動畫。

    顯示選取執行到游標和 F11 的動畫。

程式碼逐步執行 命令可以用來啟動應用程式,但通常在進入中斷模式後更常使用。

某些瀏覽命令大部分是在中斷模式中使用(也就是,當您在調試程式中暫停時)。

偵錯和中斷模式

處於中斷模式時,您可以使用各種命令來巡覽程序代碼。 您可以檢查變數的值,以尋找錯誤或 Bug。 針對某些項目類型,您也可以在中斷模式時調整應用程式。

大部分的調試程序視窗,例如 模組監看式 視窗,只有在調試程式附加至您的應用程式時才能使用。 某些調試程式功能,例如在 [局部變數] 視窗中檢視變數值或在 [監看] 視窗中評估表達式,只有在調試程序暫停(即中斷模式)時才能使用。

注意

如果您進入未載入原始檔或符號檔(.pdb)的程式碼,調試器會顯示 找不到原始檔找不到符號檔 頁面,以協助您尋找和載入檔案。 請參閱 指定符號 (.pdb) 和原始程式檔。 如果您無法載入符號或來源檔案,您仍然可以在 [反組譯] 視窗中偵錯組合語言指令。

程序代碼逐步執行

程式碼步進 是指在附加調試程式的情況下,一次執行應用程式程式碼一個語句。 調試程式步驟命令可協助您觀察每個語句的效果,並深入瞭解其執行流程。

進入程式碼

若要在偵錯時在每個語句上停止,請使用 Debug>Step Into,或選取 F11

偵錯工具會逐步執行程式碼中的語句,而不是實體行。 例如,if 子句可以寫在一行上:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

當您進入這一行時,除錯工具會將條件視為一個步驟,將結果視為另一個步驟。 在上述範例中,條件是正確的。

當呼叫巢狀函式時,進入 最深入的巢狀函式。 例如,如果您在呼叫中使用 進入,例如 Func1(Func2()),調試程式會進入函式 Func2

提示

當您執行每一行程式代碼時,您可以將滑鼠停留在變數上以查看其值,或使用 局部變數,並 監看 視窗來監看值變更。 您也可以在深入函式時,以可視化方式追蹤 呼叫堆疊。 (僅適用於 Visual Studio Enterprise,請參閱偵錯 時,在呼叫堆棧上對應方法。

調試程式碼並跳過某些函式

在偵錯時,您可能不在意某個功能。 或者,您可能知道某些程式碼的運作方式,例如經過良好測試的連結庫程序代碼。 您可以使用下列指令在逐步執行程式碼時略過程式碼。 函式仍會執行,但調試程式會略過它們。

鍵盤命令 除錯選單命令 描述
F10 逐步執行 如果目前行包含函式呼叫,則 Step Over 會執行程式碼,然後在呼叫的函式傳回之後,在第一行程式碼中暫停執行。
轉變+F11 逐步退出 Step Out 會繼續執行程式代碼,並在目前的函式傳回時暫停執行。 偵錯工具會跳過目前的函式。

執行至特定位置或功能

當您知道您想要檢查的程式代碼或知道要從何處開始偵錯時,您可能會偏好直接執行至特定位置或函式。

  • 如果您認為您可能想要重複使用斷點,最好先設定斷點。
  • 其他方法是為了方便起見,而且類似於設定暫時斷點。

在程式代碼中執行至斷點

若要在程式代碼中設定簡單的斷點,請選取您要暫停執行的程式代碼行旁的極左邊界。 您也可以選擇這一行,然後選取 F9,選取 [偵錯]>[切換斷點],或以滑鼠右鍵按下並選取 [斷點],>[插入斷點]。 斷點會顯示為程式代碼行旁左邊界的紅點。 偵錯器會在這行執行之前暫停執行。

顯示如何設定斷點的螢幕快照。

顯示如何設定斷點的螢幕快照。

Visual Studio 中的斷點提供一組豐富的功能,例如條件斷點和追蹤點。 如需詳細資訊,請參閱 使用斷點

執行至函式斷點

您可以將調試程式設定為執行,直到它到達指定的函式為止。 您可以依名稱指定函式,也可以從呼叫堆疊中選擇函式。

若要依名稱指定函式斷點:

  1. 選取 偵錯>新增斷點>函式斷點

  2. 新增函式斷點 對話方塊中,輸入函式名稱並選擇其語言:

    顯示 [新增函式斷點] 對話框的螢幕快照。

    顯示 [新增函式斷點] 對話框的螢幕快照。

  3. 選取 [確定]

如果函式重載或位於多個命名空間中,您可以在 斷點 視窗中選擇想要的函式:

顯示斷點視窗的螢幕快照。

顯示斷點視窗的螢幕快照。

若要從呼叫堆疊選取函式斷點:

  1. 偵錯時,選取 [偵錯 ,以開啟 [呼叫堆棧] 視窗。

  2. 在 [呼叫堆棧] 視窗中,以滑鼠右鍵按兩下函式,然後選取 [執行至數據指標 ],或選取 ctrl +Ctrl。

如需以視覺化方式追蹤呼叫堆疊的資訊,請參閱在偵錯時 呼叫堆疊上的 Map 方法

執行至游標位置

若要執行到游標位置,請在原始程式碼或 呼叫堆疊 視窗中,選取您要中斷的行,然後按滑鼠右鍵,選取 [執行到游標],或選取 Ctrl+F10。 選取 [執行至游標] 類似於設定 暫存斷點

強制將程式執行到游標位置

若要執行至游標位置,請在原始程式碼或 呼叫堆疊 視窗中,選取要中斷的行,然後按滑鼠右鍵,選取 [強制執行至游標]。 選取 [強制執行至光標] 會略過任何斷點和第一次機會例外,直到偵錯工具到達游標所在的程式碼行為止。

執行點擊

當調試程序暫停時,您可以將滑鼠停留在原始程式碼中的語句或 反組譯碼 視窗中,然後選取 [執行執行] 到此處, 綠色箭號。 使用 Run to Click 類似於設定 暫存斷點

顯示 [執行至按兩下] 和綠色箭號的螢幕快照。

強制執行以點擊

當調試程序暫停時,您可以按下 Shift 鍵,同時將滑鼠懸停在原始程式碼語句上,然後選取 強制執行到此處(雙綠色箭頭)。 當您選擇此選項時,應用程式會附加Visual Studio調試程式,並在游標位置暫停。 執行期間遇到的任何斷點或首次例外都會被暫時停用。

顯示 [強制執行到點擊] 的螢幕快照。

注意

從 Visual Studio 2022 開始,強制執行到點擊 功能可用。

手動中斷程序代碼

若要中斷執行中應用程式中的下一行程式代碼,請選取 [偵錯]>[全部中斷],或 選取 [ctrl+Alt+Break]。

對非使用者程式代碼進行偵錯

根據預設,調試程式會藉由啟用名為 Just My Code的設定,只嘗試偵錯您的應用程式程序代碼。 如需此功能如何適用於各種項目類型和語言,以及如何自定義此功能的詳細資訊,請參閱 Just My Code

若要在偵錯時查看架構程式碼、非 Microsoft 程式庫程式碼或系統呼叫,您可以停用 [僅我的程式碼] 功能。

開啟 [工具] (或 [偵錯) >] 窗格,展開 [所有設定>偵錯>一般] 區段,然後清除 [只啟用我的程式碼] 核取方塊。

開啟 [工具] (或 [偵錯) >] 對話方塊,展開 [偵錯一般>] 區段,然後清除 [只啟用我的程式碼] 核取方塊。

停用 Just My Code 時,非使用者程式代碼會出現在除錯程式視窗中,而調試程式可以逐步執行非使用者程式代碼。

注意

裝置專案不支援 Just My Code。

偵錯系統程序代碼

如果您已載入 Microsoft 系統代碼的偵錯符號並停用 Just My Code,您可以像進行其他呼叫一樣步入系統呼叫。

從 Visual Studio 2022 17.7 版開始,您在逐步執行外部程式碼時,可以自動反編譯 .NET 程式碼,而不需要手動載入偵錯符號。 如需詳細資訊,請參閱 在偵錯時,從 .NET 元件產生原始程式碼。

若要瞭解如何載入Microsoft符號,請參閱 設定符號檔案的位置和載入選項

若要載入特定系統元件的符號:

  1. 在您偵錯時,選擇 偵錯>>,或按 Ctrl++,以開啟 模組 視窗。

  2. 在 [模組] 視窗中,您可以告訴哪些模組在 [符號狀態] 數據行中載入了符號。 以滑鼠右鍵按下您要載入符號的模組,然後選取載入符號

進入 Managed 程式代碼中的屬性和運算子

調試器預設會略過執行管理程式碼中的屬性和運算子。 在大部分情況下,此行為可提供更佳的偵錯體驗。 若要啟用逐步執行屬性或運算子,請選取 [偵錯]>[選項]。 在 [偵錯>一般] 頁面上,清除 [步過屬性與運算子(僅限管理)] 複選框。

移動指標以變更執行流程

您可以移動黃色執行指標來變更將執行的下一個語句。 您可以在中斷模式中使用此功能。

這是進階調試程式功能。 如需詳細資訊,請參閱 移動執行指標