使用 [自動變數] 和 [區域變數] 視窗來檢查變數

[自動變數] 和 [區域變數] 視窗會在您進行偵錯時顯示變數值。 視窗只能在偵錯工作階段期間使用。 [自動變數] 視窗會顯示在偵錯工具暫停的目前語句周圍所使用的變數。 [區域變數] 視窗會顯示本機範圍中定義的變數,其通常是目前的函式或方法。

注意

如果這是您第一次嘗試對程式碼偵錯,建議先閱讀適用於完全初學者的偵錯以及偵錯技術和工具,再瀏覽本文。

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

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

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

注意

本主題適用於 Windows 上的 Visual Studio。 針對 Visual Studio for Mac,請參閱 Visual Studio for Mac 中的資料視覺效果

使用 [自動變數] 和 [區域變數] 視窗

陣列和物件會以樹狀結構控制項顯示在 [自動變數] 和 [區域變數] 視窗。 選取變數名稱左邊的箭號,展開檢視來顯示欄位和屬性。 以下是 [區域變數] 視窗中的 System.IO.FileStream 物件範例:

[區域變數] 視窗的螢幕擷取畫面,其中檔案設定為 System.IO.FileStream 值。

[區域變數] 視窗的螢幕擷取畫面,其中檔案設定為 System.IO.FileStream 值。

[區域變數] 或 [自動變數] 視窗中的紅色值表示自上次評估之後的值已變更。 變更可能來自先前的偵錯工作階段,或因為您已變更視窗中的值。

偵錯工具視窗中的預設數值格式為十進位數。 若要將它變更為十六進位,請在 [區域變數] 或 [自動變數] 視窗中按一下滑鼠右鍵 ,然後選取 [十六進位顯示]。 此變更會影響所有偵錯工具視窗。

在 [自動變數] 或 [區域變數] 視窗中編輯變數值

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

您可以輸入值的運算式,例如 a + b。 偵錯工具接受大部分的有效語言運算式。

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

警告

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

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

  • 由於分數元件的十進位至二進位轉換,編輯浮點數值會略微不精確。 即使表面上無害的編輯也可能造成浮點變數中的某些位元變更。

在 [自動變數] 或 [區域變數] 視窗中搜尋

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

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

在 [區域變數] 視窗中搜尋的螢幕擷取畫面

在 [區域變數] 視窗中搜尋的螢幕擷取畫面

若要讓搜尋更深入,請使用 [自動變數] 或 [區域變數] 視窗頂端的 [更深入地搜尋] 下拉式清單,選取您想要搜尋到巢狀物件的層級數。

在 [自動變數] 或 [區域變數] 視窗中釘選屬性

注意

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

您可以使用 [可釘選的屬性] 工具,在 [自動變數] 或 [區域變數] 視窗中依屬性快速檢查物件。 若要使用此工具,請將滑鼠停留在屬性上方,然後選取出現的釘選圖示,或按一下滑鼠右鍵,然後在產生的捷徑功能表中選取 [將成員釘選為我的最愛] 選項。 這會將該屬性提升到物件的屬性清單頂端,而屬性名稱和值會顯示在 [值] 資料行中。 若要取消釘選屬性,請再次選取釘選圖示,或在捷徑功能表中選取 [取消釘選成員為我的最愛] 選項。

[區域變數] 視窗中的 [關聯] 屬性的螢幕擷取畫面。

在 [自動變數] 或 [區域變數] 視窗中檢視物件的屬性清單時,您也可以切換屬性名稱並篩選出非關聯的屬性。 您可以選取 [自動變數] 或 [區域變數] 視窗上方工具列中的按鈕來存取每個選項。

[篩選我的最愛] 屬性的螢幕擷取畫面。

切換屬性名稱的螢幕擷取畫面。

變更 [自動變數] 或 [區域變數] 視窗的內容

您可以使用 [偵錯位置] 工具列來選取所需的函式、執行緒或流程,以變更 [自動變數] 和 [區域變數] 視窗的內容。

若要啟用 [偵錯位置] 工具列,請按下工具列區域的空白部分,然後從下拉式清單中選取 [偵錯位置],或者選取 [檢視]>[工具列]>[偵錯位置]

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

[偵錯位置] 工具列的螢幕擷取畫面。

[偵錯位置] 工具列的螢幕擷取畫面。

[自動變數] 視窗中的變數 (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; 設定中斷點,然後啟動偵錯工具。 執行暫停時,[自動變數] 視窗會顯示:

    [自動變數] 視窗的螢幕擷取畫面,其中 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; 上設定中斷點並執行偵錯工具。 執行停止時,[自動變數] 視窗會顯示:

    [自動變數] 視窗的螢幕擷取畫面,其中值為 3 的 int c 的行反白顯示。

    [自動變數] 視窗的螢幕擷取畫面,其中值為 3 的 int c 的行反白顯示。

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

View return values of method calls

在 .NET 和 C++ 程式碼中,您可以在不進入或者跳離方法呼叫時檢查在 [自動變數] 視窗中傳回的值。 檢視方法呼叫傳回值在未儲存在區域變數時很有用。 方法可以做為參數,或做為另一個方法的傳回值。

例如,下列 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;
}

若要查看 [自動變數] 視窗中 sumVars()subtractVars() 方法呼叫的傳回值:

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

  2. 開始偵錯,並在中斷點暫停執行時,選取 [跳過] 或按 F10。 您應該會在 [自動變數] 視窗中看到下列傳回值:

    [自動變數] 傳回值 C# 的螢幕擷取畫面。

    [自動變數] 傳回值 C# 的螢幕擷取畫面。