🚀 在 VS Code 中

常見問題

如何讓 IntelliSense 正常運作?

在沒有任何設定的情況下,擴充功能會嘗試透過搜尋您的工作區資料夾,以及模擬在您的電腦上找到的編譯器 (例如,Windows 的 cl.exe/MinGW、macOS/Linux 的 gcc/clang) 來尋找標頭。如果此自動設定不足,您可以執行C/C++:編輯組態 (UI) 命令來修改預設值。在該檢視中,您可以變更您想要模擬的編譯器、您想要使用的包含檔案路徑、前置處理器定義等等。

或者,如果您安裝與我們的擴充功能介面的建置系統擴充功能,您可以允許該擴充功能為您提供組態。例如,CMake 工具擴充功能可以設定使用 CMake 建置系統的專案。使用 C/C++:變更組態提供者... 命令來啟用任何此類擴充功能,以提供 IntelliSense 的組態。

對於沒有建置系統擴充功能支援的專案,第三個選項是使用 compile_commands.json 檔案 (如果您的建置系統支援產生此檔案)。在組態 UI 的「進階」區段中,您可以提供 compile_commands.json 的路徑,擴充功能將使用該檔案中列出的編譯資訊來設定 IntelliSense。

注意: 如果擴充功能無法解析您原始碼中的任何 #include 指示詞,則不會顯示原始檔主體的程式碼檢查資訊。如果您檢查 VS Code 中的 問題 視窗,擴充功能將提供有關它無法找到哪些檔案的更多資訊。如果您仍然想要顯示程式碼檢查資訊,您可以變更 C_Cpp.errorSquiggles 設定的值。

includePath 和 browse.path 之間有什麼差異?

這兩個設定在 c_cpp_properties.json 中可用,並且可能會造成混淆。

includePath

此路徑字串陣列由「預設」IntelliSense 引擎使用,該引擎提供語意感知 IntelliSense 功能。包含路徑與您透過 -I 參數傳送給編譯器的路徑相同。當您的原始檔被剖析時,IntelliSense 引擎會將這些路徑前置到您的 #include 指示詞指定的檔案,同時嘗試解析它們。除非這些路徑以 /** 結尾,否則不會以遞迴方式搜尋這些路徑。

browse.path

此路徑字串陣列由「標籤剖析器」 (「瀏覽引擎」) 使用,它會使用全域符號資訊填入資料庫。此引擎將會遞迴地列舉指定路徑下的所有檔案,並在標籤剖析您的專案資料夾時追蹤它們作為潛在的包含項目。若要停用路徑的遞迴列舉,您可以將 /* 附加到路徑字串。

當您第一次開啟工作區時,擴充功能會將 ${workspaceFolder}/** 新增至 includePath,而 browse.path 則保持未定義 (因此預設為 includePath)。如果這不符合您的需求,您可以開啟您的 c_cpp_properties.json 檔案並進行變更。

為什麼我在標準程式庫類型下方看到紅色波浪線?

最常見的原因是遺失包含路徑和定義。修正此問題最簡單的方法是在 c_cpp_properties.json 中將 compilerPath 設定為編譯器的路徑。

如何在 Windows 上讓新的 IntelliSense 與 MinGW 搭配運作?

請參閱在 Visual Studio Code 中開始使用 C++ 和 Mingw-w64

如何在適用於 Linux 的 Windows 子系統上讓新的 IntelliSense 搭配運作?

請參閱在 Visual Studio Code 中開始使用 C++ 和適用於 Linux 的 Windows 子系統

為什麼我的檔案在格式化時損毀?

如果透過具有符號連結的路徑開啟工作區資料夾 (問題 vscode-cpptools#5061),檔案可能會損毀 (且其他功能可能會失敗)。解決方法是使用已將符號連結解析為其目標的路徑來開啟工作區資料夾。

如何重新建立 IntelliSense 資料庫?

從擴充功能 0.12.3 版開始,有一個命令可以重設您的 IntelliSense 資料庫。開啟命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)),然後選擇 C/C++:重設 IntelliSense 資料庫 命令。

什麼是 ipch 資料夾?

語言伺服器會快取有關包含的標頭檔的資訊,以提升 IntelliSense 的效能。當您在工作區資料夾中編輯 C/C++ 檔案時,語言伺服器會將快取檔案儲存在 ipch 資料夾中。依預設,ipch 資料夾會儲存在使用者目錄下。具體而言,它會儲存在 Windows 上的 %LocalAppData%/Microsoft/vscode-cpptools、Linux 上的 $XDG_CACHE_HOME/vscode-cpptools/ (如果未定義 XDG_CACHE_HOME,則為 $HOME/.cache/vscode-cpptools/) 和 macOS 上的 $HOME/Library/Caches/vscode-cpptools/ 下。透過使用使用者目錄作為預設路徑,它將為每個使用者為擴充功能建立一個快取位置。由於快取大小限制會套用至快取位置,因此每個使用者擁有一個快取位置將會將快取的磁碟空間使用量限制為每個使用預設設定值的人員的該資料夾。

未使用 VS Code 的每個工作區儲存資料夾,因為 VS Code 提供的位置不明,而且我們不希望將 GB 的檔案寫入使用者可能看不到或不知道在哪裡找到它們的位置。

考量到這一點,我們知道我們將無法滿足每個不同開發環境的需求,因此我們提供了設定,讓您可以自訂最適合您情況的方式。

"C_Cpp.intelliSenseCachePath": <字串>

此設定可讓您設定快取路徑的工作區或全域覆寫。例如,如果您想要為所有工作區資料夾共用單一快取位置,請開啟 VS Code 設定,並為IntelliSense 快取路徑新增使用者設定。

"C_Cpp.intelliSenseCacheSize": <數字>

此設定可讓您設定擴充功能執行快取的數量限制。這是一個近似值,但擴充功能將盡最大努力使快取大小盡可能接近您設定的限制。如果您如上所述在工作區之間共用快取位置,您仍然可以增加/減少限制,但您應確保為IntelliSense 快取大小新增使用者設定。

如何停用 IntelliSense 快取 (ipch)?

如果您不想使用 IntelliSense 快取功能 (例如,為了解決可能僅在啟用快取時發生的錯誤),您可以將IntelliSense 快取大小設定設為 0 (或 JSON 設定編輯器中的 "C_Cpp.intelliSenseCacheSize": 0") 來停用該功能。如果您看到過多的磁碟寫入,尤其是在編輯標頭時,停用快取也可能很有幫助。

如何設定偵錯?

需要設定偵錯工具,以了解要使用哪個可執行檔和偵錯工具

從主功能表,選取執行 > 新增組態...

launch.json 檔案現在將開啟以進行編輯,並具有新的組態。預設設定可能會運作,除了您需要指定 program 設定。

請參閱設定 C/C++ 偵錯,以取得有關如何設定偵錯工具的更深入文件。

如何啟用偵錯符號?

啟用偵錯符號取決於您使用的編譯器類型。以下是一些編譯器以及啟用偵錯符號所需的編譯器選項。

如有疑問,請查看您的編譯器文件,以了解輸出中包含偵錯符號所需的選項。這可能是 -g--debug 的某種變體。

Clang (C++)

  • 如果您手動叫用編譯器,請新增 --debug 選項。
  • 如果您使用的是指令碼,請確保已設定 CXXFLAGS 環境變數。例如,export CXXFLAGS="${CXXFLAGS} --debug"
  • 如果您使用的是 CMake,請確保已設定 CMAKE_CXX_FLAGS。例如,export CMAKE_CXX_FLAGS=${CXXFLAGS}

Clang (C)

請參閱 Clang C++,但使用 CFLAGS 而不是 CXXFLAGS

gcc 或 g++

如果您手動叫用編譯器,請新增 -g 選項。

cl.exe

符號位於 *.pdb 檔案中。

為什麼偵錯無法運作?

我的中斷點未命中

當您開始偵錯時,如果您的中斷點未繫結 (實心紅圈) 或未命中,您可能需要在編譯期間啟用偵錯符號

偵錯開始,但我的堆疊追蹤中的所有行都是灰色的

如果您的偵錯工具顯示灰色堆疊追蹤、不會在斷點停止,或呼叫堆疊中的符號為灰色,則表示您的可執行檔在編譯時未包含偵錯符號

如果我懷疑 C/C++ 擴充功能有問題,該怎麼辦?

如果您有任何其他問題,請在 GitHub 討論區開始討論,或者如果您發現需要修正的問題,請在 GitHub 問題追蹤中提交問題。

如果您在使用擴充功能時遇到問題,而我們無法根據您的問題報告中的資訊診斷問題,我們可能會要求您啟用偵錯記錄並將您的記錄傳送給我們。請參閱C/C++ 擴充功能記錄,以了解如何取得 C/C++ 擴充功能記錄。