在 Visual Studio Code 中調試 C++
當您根據各個目標編譯器/平台的設定教學課程完成調試環境的基本設定後,您可以在本節中深入了解有關調試 C/C++ 的更多詳細資訊。
Visual Studio Code 根據您使用的作業系統,支援以下 C/C++ 調試器:
- Linux: GDB
- macOS: LLDB 或 GDB
- Windows: Visual Studio Windows 調試器或 GDB(使用 Cygwin 或 MinGW)
在 Windows 上使用 GDB 調試
您可以使用 VS Code 調試使用 Cygwin 或 MinGW 建立的 Windows 應用程式。若要使用 Cygwin 或 MinGW 的調試功能,必須在啟動設定 (launch.json) 中手動設定調試器路徑。若要調試您的 Cygwin 或 MinGW 應用程式,請新增 miDebuggerPath 屬性,並將其值設定為您 Cygwin 或 MinGW 環境中對應的 gdb.exe 路徑。
例如
"miDebuggerPath": "c:\\mingw\\bin\\gdb.exe"
Windows 上的 Cygwin/MinGW 調試支援附加 (attach) 和啟動 (launch) 調試情境。
若要了解更多資訊,請參閱 設定 C/C++ 調試。
如果您在 Windows 上使用 GDB 進行調試,請參閱 使用 MinGW64 進行 Windows 調試。
條件式中斷點
條件中斷點允許您僅在條件值為真 (true) 時,才在程式碼的特定行中斷執行。若要設定條件中斷點,請右鍵點擊現有的中斷點並選擇編輯中斷點 (Edit Breakpoint)。這會開啟一個小型預覽視窗,您可以在其中輸入條件;調試期間,該條件必須評估為真,中斷點才會觸發。

在編輯器中,條件中斷點會以內部帶有黑色等號的中斷點符號表示。您可以將滑鼠游標懸停在條件中斷點上以查看其條件。
函式中斷點
函式中斷點允許您在函式開頭中斷執行,而不是在程式碼的特定行中斷。若要設定函式中斷點,請在執行 (Run) 檢視中,於中斷點 (Breakpoints) 區域內點擊右鍵,然後選擇新增函式中斷點 (Add Function Breakpoint) 並輸入您想要中斷執行所在的函式名稱。
運算式評估
VS Code 在多種情境下支援運算式評估:
- 您可以在執行 (Run) 檢視的監看 (Watch) 區域輸入運算式,每當觸發中斷點時,該運算式都會被重新評估。
- 您可以在調試控制台 (Debug Console) 中輸入運算式,它只會被評估一次。
- 當您在斷點處停止時,可以評估程式碼中出現的任何運算式。
監看 (Watch) 區域中的運算式會作用於正在調試的應用程式;若運算式修改了變數的值,該變數的值在程式執行期間將會被更改。
多執行緒調試
VS Code 的 C/C++ 擴充功能具備調試多執行緒程式的能力。所有執行緒及其呼叫堆疊都會顯示在呼叫堆疊 (Call Stack) 區域中。

記憶體傾印 (Memory dump) 調試
VS Code 的 C/C++ 擴充功能也具備調試記憶體傾印 (memory dump) 的能力。若要調試記憶體傾印,請開啟您的 launch.json 檔案,並在 C++ Launch 設定中新增 coreDumpPath (針對 GDB 或 LLDB) 或 dumpPath (針對 Visual Studio Windows 調試器) 屬性,將其值設定為包含記憶體傾印路徑的字串。這甚至適用於在 x64 電腦上調試 x86 程式的情境。
額外符號
如果有額外的目錄包含調試器可用的符號檔 (例如 Visual Studio Windows 調試器的 .pdb 檔),可以透過新增 additionalSOLibSearchPath (針對 GDB 或 LLDB) 或 symbolSearchPath (針對 Visual Studio Windows 調試器) 來指定。
例如
"additionalSOLibSearchPath": "/path/to/symbols;/another/path/to/symbols"
或
"symbolSearchPath": "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols"
定位原始程式檔
如果原始程式檔不在編譯位置,可以變更其路徑。這可以透過在 sourceFileMap 區域中新增簡單的替換對來完成。列表中的第一個匹配項將被使用。
例如
"sourceFileMap": {
"/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu": "/usr/include/i686-linux-gnu/c++/4.8",
"/build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include": "/usr/include/c++/4.8"
}
GDB、LLDB 和 LLDB-MI 命令 (GDB/LLDB)
對於 C++ (GDB/LLDB) 調試環境,您可以透過調試控制台使用 -exec 命令直接執行 GDB、LLDB 和 LLDB-MI 命令,但請注意,直接在調試控制台執行命令未經測試,在某些情況下可能會導致 VS Code 當機。
其他調試功能
- 無條件中斷點
- 監看視窗
- 呼叫堆疊
- 逐步執行 (Stepping)
如需有關使用 VS Code 調試的更多資訊,請參閱這篇 VS Code 調試簡介。
如需設定 launch.json 檔案以調試 C/C++ 應用程式的其他方法,請參閱 設定 C/C++ 調試。
Natvis 架構
您可以使用 Natvis 架構在調試器中建立 C++ 物件的自訂檢視。您可以閱讀 原生物件的自訂檢視 主題,以了解有關在 C/C++ 擴充功能中使用 Natvis 的詳細資訊。
遠端調試
有關附加至遠端處理序(例如調試 Docker 容器中的處理序)的資訊,請參閱 管道傳輸 (Pipe transport)。
調試調試器
如果您在使用擴充功能進行調試時遇到問題,且我們無法根據您提供的報告進行診斷,我們可能會請您啟用日誌記錄並將日誌寄給我們。請參閱 啟用調試介面卡的日誌記錄 以了解如何取得 C/C++ 擴充功能的日誌。
已知限制
符號與程式碼導覽
所有平台
- 由於該擴充功能不會剖析函式本體,因此查看定義 (Peek Definition) 和前往定義 (Go to Definition) 對函式內部定義的符號無效。
偵錯
Windows
- Cygwin 和 MinGW 上的 GDB 無法中斷正在執行的處理序。若要在應用程式執行時(未在調試器下暫停)設定中斷點,或暫停正在調試的應用程式,請在應用程式的終端機中按下 Ctrl-C。
- Cygwin 上的 GDB 無法開啟核心傾印 (core dumps)。
Linux
- 您可能會看到錯誤訊息:
ptrace: Operation not permitted。這是因為 GDB 需要提升權限才能附加至處理序。這可以使用以下解決方案來解決:-
當使用附加至處理序 (attach to process) 時,您需要在調試工作階段開始前輸入您的密碼。
-
若要暫時停用此錯誤,請使用以下命令:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope -
若要永久移除此錯誤,請在
/etc/sysctl.d/中新增一個名為10-ptrace.conf的檔案,並加入以下內容:kernel.yama.ptrace_scope = 0。
-
macOS
- LLDB
- 使用 LLDB 調試時,如果在中斷模式下關閉終端機視窗,調試不會停止。可以透過按下停止 (Stop) 按鈕來停止調試。
- 當調試停止時,終端機視窗不會關閉。
- GDB
- 在 macOS 上使用 GDB 需要額外的手動安裝步驟。請參閱 README 中的 Manual Installation of GDB for OS X。
- 當使用 GDB 附加至處理序時,無法中斷正在調試的應用程式。GDB 只會綁定在應用程式未執行時(在附加至應用程式之前,或應用程式處於已停止狀態時)設定的中斷點。這是因為 GDB 的一個錯誤。
- 使用 GDB 調試時無法載入核心傾印,因為 GDB 不支援 macOS 使用的核心傾印格式。
- 當使用 GDB 附加至處理序時,「全部中斷 (break-all)」將會結束該處理序。
後續步驟
繼續閱讀以了解
- 為 Windows Linux 子系統 (WSL) 設定 VS Code
- 為 Mingw-w64 和 GCC 設定 VS Code
- 為 macOS 設定 VS Code
- 設定 C/C++ 調試 - 了解額外的調試器設定選項。
- 基礎編輯 - 了解功能強大的 Visual Studio Code 編輯器。
- 程式碼導覽 - 在原始碼中快速移動。
- 工作 (Tasks) - 使用工作來建置您的專案及執行更多操作。
- 調試 - 深入了解 Visual Studio Code 調試器。
如果您有任何其他問題或遇到任何問題,請在 GitHub 上提出 issue。