共用方式為


檢查 Visual Studio 調試程式中的變數

可讓您檢查變數的功能是調試程式最實用的一些功能,而且有不同的方式可以執行。 通常,當您嘗試對問題進行偵錯時,您會嘗試找出變數是否儲存預期它們具有特定應用程式狀態的值。

在本文中,您將瞭解如何使用 Visual Studio 中的調試程式來檢查變數。 Visual Studio 調試程式提供數種方便的方式,可在偵錯時檢視變數值,包括下列各項:

  • 變數檢查視窗(自動變數、局部變數和監看式視窗)
  • 程式代碼編輯器中的數據提示
  • 內嵌傳回值
  • 大型字串或複雜 .NET 物件的可視化檢視

這些功能只能在偵錯時使用。 若要瞭解如何啟動偵錯工作階段,請參閱 開始偵錯並進入中斷模式

注意

如果這是您第一次嘗試除錯程式代碼,建議您先閱讀 給絕對新手的除錯指南除錯技巧與工具,然後再繼續進行本文的閱讀。

檢查 [自動變數] 和 [局部變數] 視窗中的變數

自動變數區域變數 視窗會在偵錯時顯示變數值。 視窗只能在偵錯會話期間使用。 [Autos] 視窗會顯示在調試器暫停的當前語句周圍所使用的變數。 [局部] 視窗會顯示在區域範圍中定義的變數,通常是目前的函式或方法。

  • 若要開啟 [自動] 視窗,請在偵錯時選取 [偵錯>Windows>自動],或按 Ctrl+Alt+V>A

    自動 視窗適用於 C#、Visual Basic、C++ 和 Python 程式代碼,但不適用於 JavaScript 或 F#。

  • 若要開啟 [局部變數] 視窗,請在偵錯時 選取 [偵錯>Windows>局部變數],或按 Alt+4

陣列和物件會顯示在 自動變數局部變數 視窗中作為樹控件。 選取變數名稱左邊的箭號,展開檢視以顯示欄位和屬性。 以下是 System.IO.FileStream] 視窗中 物件的範例:

[Locals] 視窗的螢幕快照,檔案設定為 System.IO.FileStream 值。

[Locals] 視窗的螢幕快照,檔案設定為 System.IO.FileStream 值。

[局部變數] 或 [自動] 視窗中的紅色值表示自上次評估之後的值已變更。 變更可能來自先前的偵錯會話,或因為您已變更視窗中的值。

調試程式視窗中的預設數值格式為十進位數。 若要將它變更為十六進位,請在 [[局部變數] 或 [自動] 視窗中按下滑鼠右鍵,然後選取 [十六進位顯示。 這項變更會影響所有調試程序視窗。

在 [自動變數] 或 [局部變數] 視窗中編輯變數值

若要編輯 [自動變數] 或 [局部變數] 視窗中的值,請按兩下值並輸入新的值。

您可以輸入值的表示式,例如 a + b。 調試程式接受最有效的語言表達式。

在原生C++程序代碼中,您可能必須限定變數名稱的內容。 如需詳細資訊,請參閱 Context 運算子 (C++)

謹慎

請務必先了解結果,再變更值和表達式。 一些可能的問題包括:

  • 評估某些表達式可能會變更變數的值,或影響程序的狀態。 例如,評估 var1 = ++var2 會變更 var1var2的值。 這些表達式據說會產生 方面的副作用。 如果您不知道,副作用可能會導致非預期的結果。

  • 由於小數部分的十進位到二進位轉換,編輯浮點值可能會導致輕微的不準確。 即使是看似無害的編輯,也會導致浮點變數中某些位的變更。

在 [自動變數] 或 [局部變數] 視窗中搜尋

您可以使用每個視窗上方的搜尋列,在 [自動變數] 或 [局部變數] 視窗的 [名稱]、[值] 和 [類型] 資料行中搜尋關鍵詞。 按 ENTER 鍵或選取其中一個箭號來執行搜尋。 若要取消進行中的搜尋,請在搜尋列中選取 「x」 圖示。

分別使用左右箭號(Shift+F3 和 F3)在找到的相符項目之間巡覽。

局部變數視窗中搜尋的螢幕快照,

局部變數視窗中搜尋的螢幕快照,

若要讓您的搜尋更加或較不徹底,請在 AutosLocals 視窗頂端的 [搜尋更深入] 下拉式清單中,選擇您想要搜尋巢狀物件的層級數。

在 [自動變數] 或 [局部變數] 視窗中釘選屬性

注意

.NET Core 3.0 或更高版本支援此功能。

您可以使用 可釘選屬性 工具,在「自動」和「本地」窗口中快速檢視物件的屬性。 若要使用此工具,請將滑鼠停留在屬性上,然後選取出現的釘選圖示,或以滑鼠右鍵單擊,然後在彈出式選單中選取 [釘選成員為我的最愛] 選項。 這會將該屬性提升至物件屬性清單的頂端,並在 [Value] 資料行中顯示屬性名稱和值。 若要解除釘選屬性,請再次選取釘選圖示,或選取操作功能表中的 [將成員從我的最愛中解除釘選] 選項。

有關 [局部變數] 視窗中 [釘選屬性] 的螢幕快照。

您也可以在 [自動視窗] 或 [本地視窗] 中檢視物件的屬性清單時,切換屬性名稱並篩選掉非釘選的屬性。 您可以選擇[自動變數] 或 [局部變數] 視窗上方工具列中的按鈕來存取每個選項。

篩選我的最愛屬性的螢幕快照。

切換屬性名稱的螢幕快照。

變更 [自動變數] 或 [局部變數] 視窗的上下文

您可以使用 [偵錯位置] 工具列來選取所需的函式、線程或進程,以變更 自動[局部變數] 視窗的內容。

若要啟用 偵錯位置 工具列,請在工具列區域空白處按一下,然後從下拉式清單中選取 偵錯位置,或選擇 檢視>工具列>偵錯位置

設定斷點並開始偵錯。 當達到斷點時,執行會暫停,您可以在 [偵錯位置] 工具列中看到目前的執行位置。

[偵錯位置] 工具列的螢幕快照。

[偵錯位置] 工具列的螢幕快照。

自動視窗中的語言差異(C#、C++、Visual Basic、Python)

不同的程式代碼語言會在 [自動] 視窗中顯示不同的變數。

  • 在 C# 和 Visual Basic 中,[自動] 視窗會顯示目前或上一行所使用的任何變數。 例如,在 C# 或 Visual Basic 程式代碼中,宣告下列四個變數:

         public static void Main()
         {
            int a, b, c, d;
            a = 1;
            b = 2;
            c = 3;
            d = 4;
         }
    

    在行 c = 3;設定斷點,然後啟動調試程式。 執行暫停時,Autos 視窗會顯示:

    自動視窗的螢幕快照,其中 c 的值為 0。

    自動視窗的螢幕快照,其中 c 的值為 0。

    c 的值是 0,因為行 c = 3 尚未執行。

  • 在 C++ 中,自動 視窗會顯示在程序暫停執行的當前行之前至少三行中使用的變數。 例如,在C++程序代碼中,宣告六個變數:

         void main() {
             int a, b, c, d, e, f;
             a = 1;
             b = 2;
             c = 3;
             d = 4;
             e = 5;
             f = 6;
         }
    

    在行 e = 5; 設定斷點,然後執行調試程式。 當執行停止時,自動 視窗會顯示:

    Autos 視窗的螢幕截圖,其中標示顯示的是 int c 行,值為 3。

    Autos 視窗的螢幕截圖,其中標示顯示的是 int c 行,值為 3。

    變數 e 未初始化,因為行 e = 5 尚未執行。

檢視數據提示

通常,偵錯時,您想要快速檢查程式代碼編輯器中物件上的屬性值,而數據提示是執行此動作的好方法。 如需使用資料提示的詳細資訊,請參閱 在資料提示中檢視數據值

在調試程式中暫停時,將滑鼠停留在物件上,您會看到其值或其預設屬性值。

檢視數據提示

檢視數據提示

如果變數具有屬性,您可以展開 物件以查看其所有屬性。

監控變數

您可以使用 Watch 視窗來指定您想要留意的變數(或表達式)。 如需詳細資訊,請參閱 在監視視窗和快速監視視窗中設定監看

偵錯時,以滑鼠右鍵按下物件,然後選擇 [新增監看式]

監視窗口

監看式視窗

在此範例中,您已在 對象上設定監看式,而且您可以在瀏覽調試程式時看到其值變更。 不同於其他變數視窗,Watch 視窗一律會顯示您正在監看的變數(範圍不足時會呈現灰色)。

檢視方法呼叫的傳回值

在 .NET 和 C++ 代碼中,當您逐步執行或跳出方法呼叫時,可以在 Autos 視窗中檢查傳回值,這在傳回值未儲存在局部變數時很有用。 方法可以做為參數,或做為另一個方法的傳回值。

從 Visual Studio 2022 版本 17.12 Preview 3 開始,您可以不僅在 [自動變數] 視窗中,還可以直接在程式碼中檢視方法呼叫的傳回值。

顯示方法呼叫傳回值的螢幕快照。

啟用 Copilot 後,您也可以使用傳回值的數據提示中顯示的 [詢問 Copilot] 按鈕,取得與內嵌傳回值相關的目標協助。

螢幕快照,顯示出帶有 Copilot 圖示的方法呼叫返回值。

在 [自動變數] 視窗中檢視傳回值

在下列範例中,此 C# 程式代碼會新增兩個函式的傳回值:

static void Main(string[] args)
{
    int a, b, c, d;
    a = 1;
    b = 2;
    c = 3;
    d = 4;
    int x = sumVars(a, b) + subtractVars(c, d);
}

private static int sumVars(int i, int j)
{
    return i + j;
}

private static int subtractVars(int i, int j)
{
    return j - i;
}

若要查看 Autos 視窗中 sumVars()subtractVars() 方法呼叫的傳回值:

  1. int x = sumVars(a, b) + subtractVars(c, d); 行上設定斷點。

  2. 開始偵錯,當執行在斷點暫停時,請選取 [逐步執行] 或按 F10。 您應該會在 [Autos] 視窗中看到下列傳回值:

    Autos 傳回值 C# 的螢幕快照。

檢查可視化檢視中的變數

在 Visual Studio 中偵錯時,您可以使用內建可視化檢視來檢視大型字串或複雜物件,讓數據更容易檢查。 例如:

  • 字串可視化檢視器會顯示對於數據提示或調試視窗來說過長的文字、XML、HTML 和 JSON 字串。 它也可以協助您識別格式不正確的字串。 如需詳細資訊,請參閱 在字串可視化檢視中檢視字串
  • DataSet 和 IEnumerable 視覺化檢視會在表格式可視化檢視中顯示 .NET 集合物件。 如需詳細資訊,請參閱 Visual Studio 物件中的表格式可視化工具。

可視化檢視會出現在 自動 視窗和其他調試程序視窗中。

注意

如果您需要檢查可視化檢視中的 XAML 或 WPF UI 元素,請參閱或 在偵錯時檢查 XAML 屬性如何使用 WPF 樹狀檢視

若要開啟可視化檢視,您必須在偵錯期間暫停。 將滑鼠停留在具有支援可視化檢視值的變數上,然後選取放大鏡圖示 視覺化檢視Icon

開啟字串可視化檢視

開啟字串可視化檢視

取得 AI 協助

如果您擁有 Copilot,在查看 [自動變數] 及 [局部變數] 視窗或資料提示中的變數時,您可以獲得 AI 的協助。 以滑鼠右鍵點擊變數,然後使用 [詢問 Copilot] 按鈕 螢幕快照。[詢問 Copilot] 按鈕。 在此案例中,Copilot 已經知道問題的內容,因此您不需要自行在聊天中提供內容。 如需更進一步的資訊,請參閱 使用 Copilot 進行偵錯