使用 Visual Studio 偵錯工具瀏覽程式碼

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

注意

如果您不熟悉偵錯程式碼,建議您先閱讀適合完全初學者的偵錯偵錯技術和工具,然後再閱讀本文。

開始偵錯並進入中斷模式

某些巡覽命令會啟動您的應用程式,並自動附加偵錯工具。 應用程式會根據您用於啟動巡覽的命令,暫停於在特定程式碼上,接著會進入中斷模式 (也就是您的應用程式在偵錯工具中暫停)。

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

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

  • 執行至指定的位置或函式

    例如,在 Visual Studio 的程式碼編輯器中,您可以使用 [執行至游標處] 命令來啟動應用程式、附加偵錯工具並進入中斷模式。 接著,您可以使用步驟命令來巡覽程式碼。

    Animation that shows selecting Run To Cursor and then F11.

    Animation that shows selecting Run To Cursor and then F11.

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

部分巡覽命令通常是在中斷模式使用(也就是在偵錯工具內暫停時)。

偵錯和中斷模式

處於中斷模式時,您可以使用各種命令來巡覽程式碼。 您可以檢查變數的值以尋找違規或錯誤。 某些專案類型也允許您在中斷模式時調整應用程式。

大部分的偵錯工具視窗只有在偵錯工具附加至您的應用程式時才能使用,例如 [模組] 和 [監看式] 視窗。 部分偵錯工具功能只有在偵錯工具暫停時才可使用 (也就是處於中斷模式),例如在 [局部變數] 視窗中檢視變數值,或是在 [監看式] 視窗中評估運算式。

注意

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

程式碼逐步執行

程式碼逐步執行是指一次執行應用程式程式碼的一個陳述式,並附加偵錯工具。 偵錯工具步驟命令可協助您觀察每個陳述式的效果,並深入了解其執行流程。

逐步執行程式碼

在偵錯時,若要在每個陳述式上停止,請使用 [偵錯]>[逐步執行],或選取 F11

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

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

但是當您逐步執行此一行時,偵錯工具會將條件視為一個步驟,並將結果視為另一個步驟。 在上述範例中,條件為 true。

[ 逐步執行 ] 會在巢狀函式呼叫中逐步執行最深的巢狀函式。 舉例來說,如果您在類似 Func1(Func2()) 的呼叫中使用 [逐步執行],偵錯工具就會逐步執行函式 Func2

提示

在執行每一行程式碼時,您可以將滑鼠停留在變數上以查看其值,或使用 [區域變數] 和 [監看式] 視窗來監看值變更。 在逐步執行函式時,您也可以以視覺化方式追蹤呼叫堆疊。 (僅適用於 Visual Studio Enterprise,請參閱在偵錯時於呼叫堆疊上對應方法。)

逐步執行程式碼並略過某些函式

偵錯時,您可能不在乎某個函式。 或者,您可能知道某些程式碼的運作方式,例如經過良好測試的程式庫程式碼。 在程式碼逐步執行時,您可以使用下列命令來略過程式碼。 函式仍會執行,但偵錯工具會略過這些內容。

鍵盤命令 偵錯功能表命令 描述
F10 逐程序 如果目前這一行包含函式呼叫,則 [逐步執行] 會執行程式碼,然後在呼叫的函式傳回之後暫停第一行程式碼的執行。
Shift+F11 跳出 [跳離函式] 會繼續執行程式碼,並在目前的函式傳回時暫停執行。 偵錯工具會略過目前的函式。

執行至指定的位置或函式

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

  • 如果您認為可能需要重複使用中斷點,建議設定中斷點。
  • 其他方法僅為方便起見,而且類似於設定暫時中斷點。

執行至程式碼內的中斷點

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

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

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

執行至函式中斷點

您可以將偵錯工具設定為執行到指定的函式為止。 您可以依名稱來指定函式,或是在呼叫堆疊中選擇函式。

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

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

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

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. 選取 [確定]。

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

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

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

  1. 偵錯時,選取 [偵錯]>[視窗]>[呼叫堆疊] 來開啟 [呼叫堆疊] 視窗。

  2. 在 [呼叫堆疊] 視窗中,以滑鼠右鍵按一下函式,然後選取 [執行至游標處],或選取 Ctrl+F10

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

執行至游標位置

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

強制執行至游標位置

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

執行至點選處

當偵錯工具暫停時,您可以將滑鼠停留在原始程式碼或 [反組譯碼] 視窗中的陳述式上,然後選取 [執行至此處] 綠色箭號。 使用 [執行至點選處] 類似於設定暫時中斷點

Screenshot that shows Run to Click and the green arrow.

注意

[執行至點選處] 功能於 Visual Studio 2017 開始提供。

強制執行至點選處

當偵錯工具暫停時,您可以將滑鼠停留在原始程式碼中的陳述式上,同時按下 Shift 鍵,然後選取 [強制執行至這裡] (雙綠色箭號)。 當您選擇此選項時,應用程式會附加 Visual Studio 偵錯工具,並在游標位置暫停。 在執行期間發現的任何中斷點和初次發生的例外狀況都會暫時停用。

Screenshot that shows Force Run to Click.

注意

[強制執行至點選處] 功能於 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,則可以如同任何其他呼叫一樣逐步執行系統呼叫。

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

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

  1. 當您進行偵錯時,請選取 [偵錯]>[視窗]>[模組],或按下 Ctrl+Alt+U 以開啟 [模組] 視窗。

  2. 在 [模組] 視窗中,您可以得知哪些模組已在 [符號狀態] 資料行中載入符號。 以滑鼠右鍵按一下您要載入符號的模組,然後選取 [載入符號]

逐步執行 Managed 程式碼中的屬性及運算子

偵錯工具預設為不進入 Managed 程式碼中的屬性及運算子。 在大部分情況下,此操作可產生較佳的偵錯體驗。 若要停用逐步執行屬性或運算子,請選取 [偵錯]>[選項]。 在 [偵錯]>[一般] 頁面上,清除 [不進入屬性和運算子 (僅限受控)] 核取方塊。

移動指標以變更執行流程

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

這是進階偵錯工具功能。 如需詳細資訊,請參閱移動執行指標