快速入門:使用 Visual Studio 調試程式對C++進行偵錯

在這份快速入門中,你將探索如何使用 Visual Studio 除錯器來除錯你的原生 C++ 程式碼。 本文提供快速學習除錯器基本功能的方法。

如果你還沒有Visual Studio,可以從Visual Studio下載頁面安裝免費試用版

建立新專案

先建立一個新專案,這樣你就有一些程式碼可以在除錯器裡檢查。

  1. 開啟 Visual Studio 並建立新的專案。

    • 如果 開始視窗 沒開啟,請選擇 檔案>開始視窗

    • 在開始視窗中,選擇 建立新專案

  2. 「建立新專案 」視窗中,設定篩選條件並搜尋專案範本。

    • 「搜尋範本」 欄位輸入 空字

    • 展開 語言 下拉選單,選擇 C++

  3. 在結果列表中,選擇 C++ 的 Empty Project 模板,然後選擇 Next

    如果你看不到 C++ 的 Empty Project 範本,請選擇 Continue without code 選項。

    1. 選擇 Tools>取得工具與功能...,這會開啟Visual Studio安裝程式。

    2. 在安裝程式視窗中,選擇 桌面開發與 C++ 工作負載的勾選框,然後選擇 修改

      你的 Visual Studio 安裝會更新,包含所選的 C++ 工作負載。

    3. 更新完成後,選擇 檔案>開始視窗,並依 照前述指示 選擇所需的範本。

  4. 設定新專案:

    1. 輸入 Project 名稱Solution 名稱,或使用預設值。

    2. 使用預設 的位置 或選擇瀏覽(...)來建立專案到另一個資料夾。

    3. 選取 ,創建

    Visual Studio 會建立你的新專案,並將專案檔案加入指定的資料夾。

新增專案檔案

新增一個程式碼檔,這樣你就有內容可以在除錯器中測試。

  1. 方案總管 面板中,右鍵點擊你的 <project-name>,選擇 Add>New Item

    如果你沒看到方案總管面板,請選擇View>方案總管

  2. 新增項目 對話框中,輸入檔名 MyDbgApp.cpp,然後選擇 新增

    檔案會在程式碼編輯器中開啟。

  3. 將以下程式碼加入新檔案。

    #include <list>
    #include <iostream>
    
    using namespace std;
    
    void doWork() {
        list <int> c1;
    
        c1.push_back(10);
        c1.push_back(20);
    
        const list <int> c2 = c1;
        const int &i = c2.front();
        const int &j = c2.front();
        cout << "The first element is " << i << endl;
        cout << "The second element is " << j << endl;
    }
    
    int main() {
        doWork();
    }
    
  4. Ctrl+S 鍵盤快捷鍵儲存檔案變更。

設定中斷點

中斷點是一種標記,用來指出 Visual Studio 應在哪裡暫停您正在執行的程式碼。 當斷點設定時,你可以查看變數目前的值,檢視記憶體的行為,並檢查是否有特定分支的程式碼在執行。 斷點是除錯中最基本的功能。

  1. 若要設定中斷點,請在程式碼中找出對 doWork() 函式的呼叫,然後選取同一行左側邊欄中的位置。

    設定中斷點後,程式碼中對應的那一行左側邊欄會顯示一個紅點。

    截圖,展示如何在Visual Studio除錯器中設定中斷點。

    截圖,展示如何在 Visual Studio 2022 除錯器中設定中斷點。

  2. 使用 F5 鍵快捷鍵開始除錯(或選擇 除錯>開始除錯)。

    顯示 Visual Studio 中除錯器在已設定的中斷點處暫停的螢幕擷取畫面。

    顯示 Visual Studio 2022 中除錯器暫停在已設定中斷點的螢幕擷取畫面。

    程式碼執行會在呼叫 doWork() 函式前立即暫停。

    偵錯工具會在您設定的斷點處暫停。 黃色箭頭標示除錯器暫停應用程式執行的語句。

    小提示

    當你在 C++ 程式碼中對記憶體相關錯誤進行除錯時,也可以使用中斷點來查看位址值(尋找 NULL)和參考計數。

設定條件斷點

如果你在迴圈或遞迴中設定斷點,或是你有許多經常跨入的斷點,請使用 條件斷點

此方法有助於確保 只有在符合 特定條件時,程式碼才會被暫停。 條件斷點可以節省時間,也讓難以重現的問題更容易除錯。

逐一檢視你的程式碼

Visual Studio 提供多種方式指示除錯器繼續執行應用程式。 以下範例顯示了一個實用的指令,用來逐步檢視你的程式碼。

當程式碼在中斷點暫停時,將游標停留在陳述式 c1.push_back(20) 上,直到看見綠色的 按一下即可執行至此將執行移至此處 圖示。 選擇圖示。

顯示如何在 Visual Studio 偵錯工具中使用「執行至點擊處」功能的螢幕擷取畫面。

當程式碼在中斷點暫停時,將滑鼠游標停留在該陳述式 c1.AddLast(20) 上,直到您看見綠色的 按一下即可執行執行至此處 圖示。 選擇圖示。

顯示如何在 Visual Studio 2022 除錯器中使用「執行至點選處」動作的螢幕擷取畫面。

應用程式會繼續執行,呼叫 doWork,並在你選擇 執行點擊的程式碼行上暫停。

用來逐步執行程式碼的常用鍵盤命令包括 F10F11。 欲了解更多更深入的指令,請參見 Visual Studio除錯器概述

檢查資料提示中的變數

你可以利用 資料提示 功能檢查變數的狀態。

  1. 在目前程式碼行(以黃色執行指標標記)中,將滑鼠移到 c1 物件上方即可看到資料提示。

    截圖,展示如何在Visual Studio除錯器中查看程式碼變數的資料提示。

    截圖,展示如何在 Visual Studio 2022 除錯器中查看程式碼變數的資料提示。

    數據提示會顯示變數的 c1 目前值,並可讓您檢查其屬性。

    在除錯時,如果你看到某個變數的值出乎預期,那很可能表示程式有錯誤。 錯誤可能出在呼叫變數的程式碼,或是前一行。

  2. 展開資料提示以查看 c1 物件的目前屬性值。

  3. 若要在程式碼執行時繼續檢查 c1 的值,請選取資料提示上的 圖釘 圖示。

    針腳動作會讓資料尖端保持開啟。 當程式碼執行時,釘選尖端的值會改變,顯示被監視物件的當前狀態。

    你可以將置頂提示移到 IDE 內的任何位置,這樣在除錯時就不會妨礙你查看其他項目。

除錯時啟用熱重載

在除錯時,如果你發現程式碼中有想測試的變更,可以使用 熱重新載入 功能(之前稱為 Edit and Continue)。

  1. 選擇該語句的 c2.front() 第二個實例,並將程式碼改為 c2.back()

  2. 請按幾次 F10(或選擇幾次 偵錯>逐步略過),以讓偵錯工具往前執行並執行已編輯的程式碼。

    展示如何在 Visual Studio 除錯器中使用「熱重新載入」功能進行編輯後繼續執行的動畫。

    動畫,示範如何在 Visual Studio 2022 除錯器中編輯並繼續。

    F10 會一次推進調試程式一個語句,但會略過函式而不是進入函式(您略過的程式碼仍然會執行)。

欲了解更多此功能與限制,請參閱 Configure 熱重新載入

後續步驟