Microsoft C / C ++擴展提供了對Visual Studio Code的C / C ++支持,以便在Windows,Linux和macOS上使用VS Code實現跨平台C和C ++開發。該擴展仍處於預覽階段,我們關注的是VS代碼運行的所有C和C ++代碼的代碼編輯,導航和調試支持。
如果您只想要一個輕量級工具來編輯C ++文件,Visual Studio Code是一個很好的選擇,但如果您希望獲得現有Visual C ++項目的最佳體驗或在Windows上進行調試,我們建議您使用Visual Studio IDE的一個版本例如Visual Studio社區。
如果您遇到任何問題或有關於Microsoft C / C ++擴展的建議,請在GitHub上提交問題和建議。如果您尚未提供反饋,請參加此快速調查,以幫助您根據需要制定此擴展程序。
入門
要安裝Microsoft C / C ++擴展,請執行以下操作:
- 打開VS代碼。
- 單擊補充工具欄上的“擴展視圖”圖標。
- 搜索
c++
。 - 單擊“ 安裝”,然后單擊“ 重新加載”。
安裝C / C ++擴展后,打開包含C / C ++源代碼的文件夾。VS Code會將各種設置文件放入.vscode
子文件夾中。
注意:C / C ++擴展不包括C ++編譯器或調試器。您需要安裝這些工具或使用計算機上已安裝的工具。流行的C ++編譯器是用於Windows的mingw-w64,用於macOS的XCode的 Clang 和用於Linux的GCC。確保您的編譯器可執行文件位於您的平台路徑中,以便擴展程序可以找到它。該擴展還支持Windows的Windows子系統。
配置IntelliSense
擴展程序將嘗試根據您在系統上找到的編譯器確定文件夾的基本配置信息。如果由於任何原因,該配置不完整,您可以c_cpp_properties.json
通過從命令選項板運行C / Cpp:Edit configurations ...命令生成文件(⇧⌘P並添加缺少的信息。
如果#include
找不到文件或其中一個依賴項,您還可以單擊include語句下的綠色曲線來查看有關如何更新配置的建議。
這將生成一個c_cpp_properties.json
文件,允許您添加其他路徑並定義以正確啟用代碼導航和自動完成。
下面您可以看到MinGW C ++編譯器已被設置為Windows的默認編譯器。擴展將使用該信息來確定系統包含路徑和定義,以便不需要添加它們c_cpp_properties.json
。
{
"name": "Win32", "includePath": [ "${workspaceFolder}" ], "defines": [ "_DEBUG", "UNICODE" ], "compilerPath": "C:\\mingw-w64\\bin\\gcc.exe", "intelliSenseMode": "clang-x64", "browse": { "path": [ "${workspaceFolder}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } }
構建代碼
如果要從VS Code構建應用程序,則需要生成一個tasks.json
文件:
- 打開命令選項板(⇧⌘P)。
- 選擇Tasks:Configure Tasks ...命令,單擊模板中的Create tasks.json文件,您將看到任務運行器模板列表。
- 選擇Others以創建運行外部命令的任務。
- 更改為
command
用於構建應用程序的命令行表達式(例如g++
)。 - 添加任何必需的args(例如
-g
構建用於調試)。 - 您還可以將其更改
label
為更具描述性。
您現在應該tasks.json
在工作區.vscode
文件夾中看到一個類似於以下內容的文件:
{
"version": "2.0.0", "tasks": [ { "label": "build hello world", "type": "shell", "command": "g++", "args": [ "-g", "helloworld.cpp" ] } ] }
如果您希望能夠使用“ 任務:運行構建任務”(⇧⌘B)構建應用程序,則可以將其添加到build
組中。
{
"version": "2.0.0", "tasks": [ { "label": "build hello world", "type": "shell", "command": "g++", "args": [ "-g", "helloworld.cpp" ], "group": { "kind": "build", "isDefault": true } } ] }
有關任務的更多信息,請參閱通過任務與外部工具集成。
調試代碼
要啟用調試,您需要生成一個launch.json
文件:
- 單擊補充工具欄中的“調試”圖標,導航到“調試”視圖。
- 在“ 調試”視圖中,單擊“ 配置”圖標。
- 從“ 選擇環境”下拉列表中選擇
C++ (GDB/LLDB)
(以使用GDB或LLDB)或C++ (Windows)
(以使用Visual Studio Windows調試程序)。這將使用兩種配置創建一個用於編輯的文件:launch.json
- C ++ Launch定義了在開始調試時啟動應用程序的屬性。
- C ++ Attach定義了附加到已經運行的進程的屬性。
program
使用您正在調試的程序的路徑更新該屬性。- 如果您希望在開始調試時構建應用程序,請添加一個
preLaunchTask
屬性,其中包含您在其中創建的構建任務的名稱tasks.json
(上例中的“構建hello world”)。
下面是使用MinGW GDB調試器的示例:
{
"version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\mingw\\bin\\gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build hello world" } ] }
要了解更多信息,請參閱配置launch.json以進行C / C ++調試。
如果在Windows上使用GDB進行調試,請參閱使用GDB進行Windows調試。
編輯代碼
代碼格式
Visual Studio Code的C / C ++擴展支持使用擴展名附帶的clang格式進行源代碼格式化。
您可以使用格式文檔(⇧⌥F)格式化整個文件,也可以使用右鍵單擊上下文菜單中的格式選擇(⌘K⌘F)格式化當前選擇。您還可以使用以下設置配置自動格式化:
editor.formatOnSave
- 保存文件時格式化。editor.formatOnType
- 在鍵入時格式化(在;字符上觸發)。
默認情況下,clang格式樣式設置為“file”,這意味着它會.clang-format
在工作區內查找文件。如果.clang-format
找到該文件,則根據文件中指定的設置應用格式。如果.clang-format
工作區中未找到任何文件,則會根據C_Cpp.clang_format_fallbackStyle
設置中指定的默認樣式應用格式設置。目前,默認格式樣式是“Visual Studio”,它是Visual Studio中默認代碼格式化程序的近似值。
“Visual Studio”clang格式樣式還不是官方的OOTB clang格式樣式,但它暗示了以下clang格式設置:
UseTab: (VS Code current setting)
IndentWidth: (VS Code current setting)
BreakBeforeBraces: AllMan
AllowShortIfStatementsOnASingleLine: false IndentCaseLabels: false ColumnLimit: 0
如果您要使用與擴展名附帶的格式不同的clang格式版本,則可以使用該C_Cpp.clang_format_path
設置並將其值設置為安裝clang格式二進制文件的路徑。
例如,在Windows平台上:
"C_Cpp.clang_format_path": "C:\\Program Files (x86)\\LLVM\\bin\\clang-format.exe"
自動完成
自動完成由與Visual Studio相同的引擎提供支持。當您的工作區配置了所有必需的包含路徑和定義時,您將獲得最相關的建議(請參閱上面的“配置IntelliSense”部分)。
導航代碼
C / C ++擴展提供的源代碼導航功能是理解和繞過代碼庫的強大工具。這些功能由存儲在符號信息的離線數據庫中的標簽提供支持。安裝了C / C ++擴展后,只要將包含C ++源代碼文件的文件夾加載到VS代碼中,就會生成此數據庫。當標記解析器生成此信息時,數據庫圖標將顯示在活動配置名稱旁邊(下圖中的“Win32”)。
當圖標消失時,源代碼符號已在脫機數據庫中標記。
指定其他包含目錄以獲得更好的符號支持
為了提供最佳體驗,VS Code的C / C ++擴展需要知道它在哪里可以找到代碼中引用的每個頭文件。默認情況下,擴展名搜索當前源目錄,其子目錄和某些特定於平台的位置。如果找不到引用的頭文件,VS Code會在引用它的每個#include指令下面顯示綠色波形。
要指定要搜索的其他包含目錄,請將光標放在顯示綠色波浪線的任何#include指令上,然后在出現時單擊燈泡操作。這將打開文件c_cpp_properties.json
進行編輯; 在這里,您可以通過向“browse.path”屬性添加更多目錄來單獨為每個平台配置指定其他包含目錄。
搜索符號
您可以在當前文件或工作區中搜索符號,以便更快地導航代碼。
要在當前文件中搜索符號,請按⇧⌘O,然后輸入您要查找的符號的名稱。將顯示潛在匹配列表,並在您鍵入時進行過濾。從匹配列表中選擇以導航到其位置。
要在當前工作空間中搜索符號,請按⌘T,然后輸入符號的名稱。潛在匹配列表將如前所示。如果您選擇的文件尚未打開,則會在導航到匹配位置之前打開該文件。
或者,如果您願意,可以通過命令選項板訪問這些命令來搜索符號。使用快速打開(⌘P)然后輸入'@'命令搜索當前文件,或輸入'#'命令搜索當前工作區。⇧⌘O和⌘T分別只是'@'和'#'命令的快捷方式,所以一切都是一樣的。
窺視定義
您可以使用Peek Definition功能快速查看符號的定義方式。此功能在窺視窗口內的定義附近顯示幾行代碼,因此您可以在不離開當前位置的情況下查看。
要查看符號的定義,請將光標放在源代碼中使用的任何位置的符號上,然后按⌥F12。或者,您可以從上下文菜單中選擇Peek Definition(右鍵單擊,然后選擇Peek Definition)。
目前,C / C ++擴展不會以某種方式解析代碼,以幫助它根據符號的使用方式區分競爭定義。當符號在不同的上下文中定義不同的事物時會出現這些競爭定義,例如在重載函數,類及其構造函數以及其他情況下發生。發生這種情況時,每個競爭定義都列在窺視窗口的右側,當前選擇的源代碼顯示在左側。
打開窺視窗口,瀏覽競爭定義列表以找到您感興趣的定義。如果要導航到其中一個定義的位置,只需雙擊您感興趣的定義,或者按雙擊查看窗口左側顯示的源代碼中的任意位置。
轉到定義
您還可以使用“轉到定義”功能快速導航到定義符號的位置。
要轉到符號的定義,請將光標放在源代碼中使用的符號上,然后按F12。或者,您可以從上下文菜單中選擇“ 轉到定義 ”(右鍵單擊,然后選擇“ 轉到定義”)。如果只有一個符號定義,您將直接導航到其位置,否則競爭定義將顯示在上一節中所述的查看窗口中,您必須選擇要轉到的定義。
調試
按照“ 入門”中的說明設置調試環境的基礎知識后,您可以在本節中了解有關調試C / C ++的更多詳細信息。
VS 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調試支持附加和啟動調試方案。
條件斷點
條件斷點使您只有在條件的值為true時才能在特定代碼行上中斷執行。要設置條件斷點,請右鍵單擊現有斷點,然后選擇“ 編輯斷點”。這將打開一個小的查看窗口,您可以在其中輸入必須評估為true的條件,以便在調試期間命中斷點。
在編輯器中,條件斷點由斷點符號表示,斷點符號內部有一個黑色等號。您可以將光標放在條件斷點上以顯示其條件。
功能斷點
函數斷點使您能夠在函數的開頭而不是在特定的代碼行上中斷執行。要設置函數斷點,請在“ 調試”窗格中右鍵單擊“ 斷點”部分,然后選擇“ 添加函數斷點”並輸入要在其上執行的函數的名稱。
表達評估
VS Code支持在幾種情況下進行表達式評估:
- 您可以在“ 調試”面板的“ 監視”部分中鍵入表達式,並在每次遇到斷點時對其進行評估。
- 您可以在調試控制台中鍵入表達式,它只會被評估一次。
- 您可以在斷點處停止時評估代碼中出現的任何表達式。
請注意,Watch部分中的表達式在正在調試的應用程序中生效; 修改變量值的表達式將在程序的持續時間內修改該變量。
多線程調試
VS Code的C / C ++擴展能夠調試多線程程序。所有線程及其調用堆棧都顯示在“ 調用堆棧”部分中:
內存轉儲調試
VS Code的C / C ++擴展還具有調試內存轉儲的能力。要調試內存轉儲,請打開launch.json
文件並將coreDumpPath
(對於GDB或LLDB)或dumpPath
(對於Visual Studio Windows調試器)屬性添加到C ++啟動配置,將其值設置為包含內存轉儲路徑的字符串。這甚至適用於在x64機器上調試的x86程序。
附加符號
如果存在調試器可以找到符號文件的其他目錄(例如,.pdb
Visual Studio Windows調試器的文件),則可以通過添加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和MI命令(GDB / LLDB)
對於C++ (GDB/LLDB)
調試環境,您可以使用該命令直接通過調試控制台執行GDB,LLDB和MI命令-exec
,但要小心,直接在調試控制台中執行命令是未經測試的,並且在某些情況下可能會導致VS Code崩潰。
其他調試功能
- 無條件斷點
- 觀察窗口
- 調用堆棧
- 步進
有關使用VS Code進行調試的更多信息,請參閱VS Code中的調試簡介。
已知限制
符號和代碼導航
所有平台:
- 因為擴展不解析函數體,所以Peek Definition和Go to Definition不適用於函數體內定義的符號。
調試
視窗:
- Cygwin和MinGW上的GDB無法打破正在運行的進程。要在應用程序運行時設置斷點(未在調試器下停止),或暫停正在調試的應用程序,請在應用程序終端中按Ctrl-C。
- Cygwin上的GDB無法打開核心轉儲。
Linux的:
- GDB需要提升權限才能附加到進程。使用attach進行處理時,需要在調試會話開始之前提供密碼。
蘋果系統:
- LLDB:
- 使用LLDB進行調試時,如果在中斷模式下關閉終端窗口,則調試不會停止。按“ 停止”按鈕可以停止調試。
- 停止調試時,終端窗口未關閉。
- GDB:
- 需要完成其他手動安裝步驟才能在macOS上使用GDB。見的OS X GDB的手動安裝的自述。
- 使用GDB附加到進程時,無法中斷正在調試的應用程序。GDB將僅綁定應用程序未運行時設置的斷點(在連接到應用程序之前或應用程序處於停止狀態時)。這是由於GDB中的一個錯誤。
- 使用GDB進行調試時無法加載核心轉儲,因為GDB 不支持macOS中使用的核心轉儲格式。
- 當使用GDB附加到進程時,break-all將結束該進程。
下一步
請繼續閱讀以了解:
常見問題
問:我的項目不會加載。
答: VS Code目前不支持C ++項目文件,而是將您選擇的目錄視為項目的工作區。該目錄及其子目錄中的源代碼文件是工作區的一部分。
問:如何構建/運行我的項目?
答: VS Code支持您可以配置以構建應用程序的任務,並且本機地了解MSBuild,CSC和XBuild的輸出。有關更多信息,請參閱任務文檔。
如果您有任何其他問題或遇到任何問題,請在GitHub上提出問題。
常用軟件開發學習資料目錄:
1.經典編程電子書收藏
2.C&C++編程學習資料收藏
3.算法及數據結構(有關c,c++,java)
4.Java開發學習資料收藏
5.Android開發學習資料收藏
6.Python開發學習資料收藏
7.大數據,機器學習,人工智能資料收藏
8.Docker資料收藏
C語言編程實例