在 Visual Studio Code 中偵錯 C++
在依照各目標編譯器/平台的組態教學課程設定好偵錯環境的基本設定後,您可以在本節中了解關於 C/C++ 偵錯的更多詳細資料。
根據您所使用的作業系統,Visual Studio Code 支援下列適用於 C/C++ 的偵錯工具:
- Linux:GDB
- macOS:LLDB 或 GDB
- Windows:Visual Studio Windows 偵錯工具或 GDB (使用 Cygwin 或 MinGW)
使用 GDB 進行 Windows 偵錯
您可以使用 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 偵錯同時支援附加和啟動偵錯情境。
若要深入了解,請參閱設定 C/C++ 偵錯。
如果您正在 Windows 上使用 GDB 進行偵錯,請參閱使用 MinGW64 進行 Windows 偵錯。
條件式中斷點
條件中斷點可讓您僅在條件值為 true 時,才在特定程式碼行暫停執行。若要設定條件中斷點,請在現有的中斷點上按一下滑鼠右鍵,然後選取編輯中斷點。這會開啟一個小型檢視視窗,您可以在其中輸入在偵錯期間觸發中斷點時必須評估為 true 的條件。

在編輯器中,條件中斷點會以內部包含黑色等號的中斷點符號來表示。您可以將游標停在條件中斷點上以顯示其條件。
函式中斷點
函式中斷點可讓您在函式開頭處暫停執行,而不是在特定的程式碼行。若要設定函式中斷點,請在執行檢視中的中斷點區段內按一下滑鼠右鍵,然後選擇新增函式中斷點,並輸入您想要在其上暫停執行的函式名稱。
運算式評估
VS Code 在數個內容中支援運算式評估:
- 您可以將運算式輸入到執行檢視的監看區段中,每當觸發中斷點時就會進行評估。
- 您可以將運算式輸入到偵錯主控台中,它將只會被評估一次。
- 當您在中斷點暫停時,您可以評估程式碼中出現的任何運算式。
監看區段中的運算式會在被偵錯的應用程式中生效;會修改變數值的運算式將會在程式執行期間修改該變數。
多執行緒偵錯
適用於 VS Code 的 C/C++ 擴充功能具有偵錯多執行緒程式的能力。所有執行緒及其呼叫堆疊都會顯示在呼叫堆疊區段中

記憶體傾印偵錯
適用於 VS Code 的 C/C++ 擴充功能也具有偵錯記憶體傾印的能力。若要偵錯記憶體傾印,請開啟您的 launch.json 檔案,並將 coreDumpPath (適用於 GDB 或 LLDB) 或 dumpPath (適用於 Visual Studio Windows 偵錯工具) 屬性新增至 C++ Launch 組態,將其值設定為包含記憶體傾印路徑的字串。這甚至適用於在 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 當機。
其他偵錯功能
- 無條件中斷點
- 監看視窗
- 呼叫堆疊
- 逐步執行
如需使用 VS Code 進行偵錯的詳細資訊,請參閱在 VS Code 中進行偵錯的簡介。
如需設定 launch.json 檔案以偵錯 C/C++ 應用程式的其他方法,請參閱設定 C/C++ 偵錯。
Natvis 架構
您可以使用 Natvis 架構在偵錯工具中建立 C++ 物件的自訂檢視。您可以閱讀原生物件的自訂檢視主題,以取得搭配 C/C++ 擴充功能使用 Natvis 的詳細資料。
遠端偵錯
如需附加至遠端處理序 (例如偵錯 Docker 容器中的處理序) 的相關資訊,請參閱管線傳輸。
偵錯偵錯工具
如果您遇到擴充功能的偵錯問題,而我們無法根據您的問題報告中的資訊進行診斷,我們可能會請您啟用記錄功能並將記錄檔傳送給我們。請參閱為偵錯介面卡啟用記錄,以了解如何取得 C/C++ 擴充功能記錄檔。
已知限制
符號與程式碼導覽
所有平台
- 由於擴充功能不會剖析函式主體,因此預覽定義和移至定義不適用於在函式主體內定義的符號。
偵錯
Windows
- Cygwin 和 MinGW 上的 GDB 無法中斷執行中的處理序。若要在應用程式執行時 (未在偵錯工具下暫停) 設定中斷點,或暫停正在偵錯的應用程式,請在應用程式的終端機中按下 Ctrl-C。
- Cygwin 上的 GDB 無法開啟核心傾印。
Linux
- 您可能會看到類似這樣的錯誤:
ptrace: Operation not permitted。這是因為 GDB 需要提高的權限才能附加至處理序。這可以使用下列解決方案來解決:-
使用附加至處理序時,您必須先提供密碼,然後偵錯工作階段才能開始。
-
若要暫時停用此錯誤,請使用下列命令:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope -
若要永久排除此錯誤,請將名為
10-ptrace.conf的檔案新增至/etc/sysctl.d/,並加入下列內容kernel.yama.ptrace_scope = 0。
-
macOS
- LLDB
- 使用 LLDB 進行偵錯時,如果在中斷模式下關閉終端機視窗,則偵錯不會停止。您可以按一下停止按鈕來停止偵錯。
- 當偵錯停止時,終端機視窗不會關閉。
- GDB
- 在 macOS 上使用 GDB 需要額外的手動安裝步驟。請參閱 README 中的 Manual Installation of GDB for OS X。
- 使用 GDB 附加至處理序時,無法中斷正在偵錯的應用程式。GDB 只會繫結在應用程式未執行時 (在附加至應用程式之前,或在應用程式處於停止狀態時) 所設定的中斷點。這是由於 GDB 中的錯誤所致。
- 使用 GDB 進行偵錯時無法載入核心傾印,因為 GDB 不支援 macOS 中使用的核心傾印格式。
- 使用 GDB 附加至處理序時,「全部中斷 (break-all)」將會終結該處理序。
後續步驟
繼續閱讀以了解
- 為適用於 Linux 的 Windows 子系統設定 VS Code
- 為 Mingw-w64 與 GCC 設定 VS Code
- 為 macOS 設定 VS Code
- 設定 C/C++ 偵錯 - 了解其他偵錯工具組態選項。
- 基本編輯 - 了解功能強大的 Visual Studio Code 編輯器。
- 程式碼導覽 - 在原始碼中快速移動。
- 工作 - 使用工作來建置您的專案及執行其他操作。
- 偵錯 - 深入了解 Visual Studio Code 偵錯工具。
如果您有任何其他問題或遇到任何問題,請在 GitHub 上提出問題。