在本教程中,您將在
Windows
上使用
Microsoft Visual c++
編譯器和調(diào)試器配置
Visual Studio Code
。
(一)預(yù)備知識(shí)
要成功完成本教程,您必須完成以下步驟:
-
1.安裝Visual Studio Code。
-
2.安裝VS Code的C/ c++擴(kuò)展。你可以通過(guò)在Extensions視圖中搜索’c++’
(Ctrl+Shift+X)
來(lái)安裝C/ c++擴(kuò)展。 -
3.安裝Microsoft Visual c++ (MSVC)編譯器工具集。
如果您有一個(gè)最新版本的Visual Studio,請(qǐng)從Windows開(kāi)始菜單中打開(kāi)Visual Studio Installer
,并查看是否檢查了c++工作負(fù)載。如果沒(méi)有安裝,則選中該框并選擇安裝程序中的Modify
按鈕。您也可以安裝帶有c++工作負(fù)載的桌面開(kāi)發(fā),而不需要安裝完整的Visual Studio IDE。從Visual Studio下載頁(yè)面向下滾動(dòng),直到在
All Downloads
下看到Tools for Visual Studio 2019
,并選擇Build Tools for Visual Studio 2019
下載。
這將啟動(dòng)Visual Studio安裝程序,它將彈出一個(gè)對(duì)話框,顯示可用的Visual Studio構(gòu)建工具工作負(fù)載。檢查Desktop development with C++
負(fù)載并選擇Install
。
注意:您可以使用Visual Studio Build Tools
的c++工具集和Visual Studio Code編譯、構(gòu)建和驗(yàn)證任何c++代碼庫(kù)。
(二)檢查您的Microsoft Visual c++安裝
要從命令行或VS Code
中使用MSVC
,你必須在Developer Command Prompt for Visual Studio
中運(yùn)行。普通shell(如PowerShell、Bash或Windows命令提示符)
沒(méi)有設(shè)置必要的路徑環(huán)境變量。
要打開(kāi)Developer Command Prompt for VS
,在Windows開(kāi)始菜單中輸入“Developer”,你應(yīng)該會(huì)看到它出現(xiàn)在建議列表中。確切的名稱取決于您安裝的Visual Studio或Visual Studio構(gòu)建工具的版本。選擇要打開(kāi)提示符的項(xiàng)目。
你可以通過(guò)輸入'cl'
來(lái)測(cè)試你是否已經(jīng)正確安裝了c++編譯器cl.exe
,你應(yīng)該會(huì)看到帶有版本和基本用法描述的版權(quán)信息。
如果開(kāi)發(fā)人員命令提示符使用BuildTools位置作為開(kāi)始目錄(你不會(huì)想把項(xiàng)目放在那里),在你開(kāi)始創(chuàng)建新項(xiàng)目之前,導(dǎo)航到你的用戶文件夾(C:\users\{你的用戶名}\
)。
(三)創(chuàng)建Hello World
在Developer Command Prompt
中,創(chuàng)建一個(gè)名為“projects”
的空文件夾,在這里你可以存儲(chǔ)所有的VS Code項(xiàng)目,然后創(chuàng)建一個(gè)名為“helloworld”
的子文件夾,導(dǎo)航到它,通過(guò)輸入以下命令在該文件夾(.)
中打開(kāi)VS Code (Code)
:
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
"code ."
命令在當(dāng)前工作文件夾中打開(kāi)VS code,這將成為你的"workspace"
。在學(xué)習(xí)本教程的過(guò)程中,你會(huì)看到在工作區(qū)的.vscode
文件夾中創(chuàng)建了三個(gè)文件:
-
tasks.json
(構(gòu)建指令) -
launch.json
(調(diào)試器設(shè)置) -
c_cpp_properties.json
(編譯器路徑和智能感知設(shè)置)
3.1添加一個(gè)源代碼文件
在“文件資源管理器”
標(biāo)題欄中,選擇“新建文件”
按鈕,并將文件命名為helloworld.cpp
。
3.2添加helloworld源代碼
現(xiàn)在粘貼源代碼:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg)
{
cout << word << " ";
}
cout << endl;
}
現(xiàn)在按Ctrl+S
保存文件。注意你剛剛添加的文件是如何出現(xiàn)在VS Code的側(cè)邊欄的文件資源管理器視圖中(Ctrl+Shift+E
):
您也可以啟用“Auto Save”來(lái)自動(dòng)保存您的文件更改,通過(guò)檢查File
菜單中的“Auto Save”。
最左邊的活動(dòng)欄允許您打開(kāi)不同的視圖,如Search、Source Control和Run
。在本教程的后面,您將看到Run
視圖。你可以在VS Code用戶界面文檔中找到更多關(guān)于其他視圖的信息。注意:
當(dāng)你保存或打開(kāi)一個(gè)C++文件時(shí),你可能會(huì)看到來(lái)自C/C++擴(kuò)展的通知,關(guān)于內(nèi)部版本的可用性,它允許你測(cè)試新特性和修復(fù)。您可以通過(guò)選擇X
(清除通知)來(lái)忽略此通知。
3.3探索智能感知
在新的helloworld.cpp
文件中,將鼠標(biāo)懸停在vector或string上以查看類(lèi)型信息。在聲明了msg變量之后,開(kāi)始鍵入msg。就像調(diào)用成員函數(shù)一樣。你應(yīng)該立即看到一個(gè)顯示所有成員函數(shù)的完成列表,以及一個(gè)顯示msg對(duì)象類(lèi)型信息的窗口:
按Tab
鍵可插入所選成員;然后,當(dāng)您添加開(kāi)括號(hào)時(shí),您將看到關(guān)于函數(shù)所需的任何參數(shù)的信息。
3.4構(gòu)建helloworld.cpp
接下來(lái),您將創(chuàng)建一個(gè)tasks.json
文件告訴VS Code如何構(gòu)建(編譯)程序。這個(gè)任務(wù)將調(diào)用Microsoft c++編譯器來(lái)基于源代碼創(chuàng)建一個(gè)可執(zhí)行文件。
從主菜單中選擇Terminal > Configure Default Build Task
。在下拉菜單中,它將顯示一個(gè)任務(wù)下拉菜單,列出c++編譯器的各種預(yù)定義構(gòu)建任務(wù)。選擇cl.exe build active file
,它將構(gòu)建當(dāng)前在編輯器中顯示(活動(dòng))的文件。
這將在.vscode
目錄下創(chuàng)建一個(gè)tasks.json
文件,并在編輯器中打開(kāi)它。
你的新tasks.json
文件看起來(lái)應(yīng)該類(lèi)似于下面的json(已經(jīng)安裝中文擴(kuò)展模塊):
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe 生成活動(dòng)文件",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe:",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "編譯器: cl.exe"
}
]
}
command
設(shè)置指定要運(yùn)行的程序;在本例中是"cl.exe"
。args
數(shù)組指定將被傳遞給cl.exe
的命令行參數(shù)。這些參數(shù)必須按照編譯器所期望的順序指定。這個(gè)任務(wù)告訴c++編譯器把活躍的文件(${file}
),編譯它,并在當(dāng)前目錄(${fileDirname}
)創(chuàng)建一個(gè)與有源文件名稱相同的. exe
可執(zhí)行文件(${fileBasenameNoExtension}.exe)
,對(duì)于我們的示例是helloworld.exe
。
注意:您可以了解更多關(guān)于tasks.json
的信息。
label
是你將在任務(wù)列表中看到的;你想叫什么就叫什么。problemMatcher
值選擇用于查找編譯器輸出中的錯(cuò)誤和警告。對(duì)于cl.exe
,如果使用$msCompile
問(wèn)題匹配器,您將得到最好的結(jié)果。group
對(duì)象中的isDefault: true
值指定當(dāng)按Ctrl+Shift+B
時(shí)將運(yùn)行此任務(wù)。這個(gè)屬性只是為了方便;如果您將其設(shè)置為false
,您仍然可以使用Tasks: Run Build Task
從終端菜單中運(yùn)行它。
3.5運(yùn)行構(gòu)建
- 1.回到
helloworld.cpp
。您的任務(wù)將構(gòu)建活動(dòng)文件,而您希望構(gòu)建helloworld.cpp
- 2.運(yùn)行
tasks.json
中定義的構(gòu)建任務(wù),按Ctrl+Shift+B
或從終端主菜單選擇Tasks: Run Build Task
構(gòu)建任務(wù)。 - 3.當(dāng)任務(wù)開(kāi)始時(shí),您應(yīng)該看到終端出現(xiàn)在源代碼編輯器下面。任務(wù)完成后,終端顯示編譯器的輸出,表明構(gòu)建成功還是失敗。對(duì)于一個(gè)成功的c++構(gòu)建,輸出看起來(lái)像這樣:
如果構(gòu)建失敗是因?yàn)闆](méi)有找到cl.exe
,或者缺少包含路徑,確保你已經(jīng)從Developer Command Prompt for Visual Studio
中啟動(dòng)了VS Code。 - 1.使用
+
按鈕創(chuàng)建一個(gè)新終端,您將擁有一個(gè)以helloworld
文件夾作為工作目錄的新終端(運(yùn)行PowerShell)。運(yùn)行ls
,您現(xiàn)在應(yīng)該看到可執(zhí)行文件helloworld.exe
以及各種中間c++輸出和調(diào)試文件(helloworld.obj helloworld.pdb
)。 - 你可以通過(guò)在終端中輸入
.\helloworld.exe
運(yùn)行helloworld
。
3.6修改tasks.json
您可以通過(guò)使用像${workspaceFolder}\\*.cpp
這樣的參數(shù)而不是${file}
來(lái)構(gòu)建多個(gè)c++文件。這將構(gòu)建當(dāng)前文件夾中的所有.cpp
文件。你也可以通過(guò)將${fileDirname}\\${fileBasenameNoExtension}.exe
替換為硬編碼的文件名(例如${workspaceFolder}\\myProgram.exe
)來(lái)修改輸出文件名。
${workspaceFolder}
表示工作目錄也就是code .
的目錄,而${fileDirname}
表示打開(kāi)的文件所在的目錄。
(四)調(diào)試helloworld.cpp
接下來(lái),當(dāng)你按下F5
來(lái)調(diào)試程序時(shí),VS Code將創(chuàng)建一個(gè)launch.json
文件來(lái)啟動(dòng)Microsoft c++調(diào)試器。在主菜單中,選擇Run > Add Configuration...
然后選擇c++ (Windows)
。
然后,您將看到一個(gè)用于各種預(yù)定義調(diào)試配置的下拉列表。選擇cl.exe build and debug active file
。
VS Code創(chuàng)建一個(gè)launch.json
文件,在編輯器中打開(kāi)它,構(gòu)建并運(yùn)行helloworld
。
VS Code創(chuàng)建一個(gè)launch.json
文件,在編輯器中打開(kāi)它,并構(gòu)建并運(yùn)行helloworld
。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "cl.exe - 生成和調(diào)試活動(dòng)文件",
"type": "cppvsdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"console": "externalTerminal",
"preLaunchTask": "C/C++: cl.exe 生成活動(dòng)文件"
}
]
}
program
設(shè)置指定要調(diào)試的程序。在這里,它被設(shè)置為活動(dòng)文件文件夾${fileDirname}
和帶有.exe
擴(kuò)展名的活動(dòng)文件名${fileBasenameNoExtension}.exe
,如果helloworld.cpp
是活動(dòng)文件,exe
文件將是helloworld.exe
。
默認(rèn)情況下,c++擴(kuò)展不會(huì)在源代碼中添加任何斷點(diǎn),并且stopAtEntry
值設(shè)置為false
。將stopAtEntry
值更改為true
,以使調(diào)試器在開(kāi)始調(diào)試時(shí)在main
上停止。
4.1啟動(dòng)調(diào)試會(huì)話
- 1.回到
helloworld.cpp
,使它成為活動(dòng)文件。 - 2.按
F5
或從主菜單中選擇Run > Start Debugging
。在您開(kāi)始逐步執(zhí)行源代碼之前,讓我們花點(diǎn)時(shí)間來(lái)注意一下用戶界面中的幾個(gè)變化:- 集成終端出現(xiàn)在源代碼編輯器的底部。在
Debug Output
選項(xiàng)卡中,可以看到指示調(diào)試器已啟動(dòng)并正在運(yùn)行的輸出。 - 編輯器突出顯示
main
方法中的第一條語(yǔ)句。這是一個(gè)斷點(diǎn),c++擴(kuò)展自動(dòng)為您設(shè)置:
左邊的Run
視圖顯示調(diào)試信息。在本教程的后面,您將看到一個(gè)示例。
在代碼編輯器的頂部,會(huì)出現(xiàn)一個(gè)調(diào)試控制面板。你可以通過(guò)抓取左邊的點(diǎn)在屏幕上移動(dòng)它。
- 集成終端出現(xiàn)在源代碼編輯器的底部。在
4.2逐步執(zhí)行代碼
現(xiàn)在,您可以開(kāi)始逐步執(zhí)行代碼了。
- 1.在調(diào)試控制面板中選擇
Step over
圖標(biāo),直到for (const string& word: msg)
語(yǔ)句突出顯示。Step Over
命令跳過(guò)在創(chuàng)建和初始化msg變量時(shí)調(diào)用的vector和string
類(lèi)中的所有內(nèi)部函數(shù)調(diào)用。注意左邊的Variables
窗口中的變化。在這種情況下,錯(cuò)誤是預(yù)期的,因?yàn)楸M管循環(huán)的變量名現(xiàn)在對(duì)調(diào)試器可見(jiàn),但語(yǔ)句還沒(méi)有執(zhí)行,所以此時(shí)沒(méi)有可讀的內(nèi)容。但是msg
的內(nèi)容是可見(jiàn)的,因?yàn)檎Z(yǔ)句已經(jīng)完成。 - 2.再次按下
Step Over
進(jìn)入程序中的下一條語(yǔ)句(跳過(guò)為初始化循環(huán)而執(zhí)行的所有內(nèi)部代碼)。現(xiàn)在,Variables
窗口顯示了關(guān)于循環(huán)變量的信息。 - 3.再次按
Step over
來(lái)執(zhí)行cout
語(yǔ)句。截至2019年3月版本的擴(kuò)展,沒(méi)有輸出顯示,直到循環(huán)完成。 - 4.如果愿意,可以繼續(xù)按
Step over
,直到vector
中的所有單詞都被打印到控制臺(tái)。但是,如果您對(duì)此感到好奇,可以嘗試按下Step Into
按鈕來(lái)逐步查看c++標(biāo)準(zhǔn)庫(kù)中的源代碼!
要返回到您自己的代碼,一種方法是一直按Step over
。另一種方法是在代碼中設(shè)置斷點(diǎn),方法是切換到代碼編輯器中的helloworld.cpp
選項(xiàng)卡,將插入點(diǎn)放在循環(huán)中cout
語(yǔ)句的某個(gè)位置,然后按F9
。左邊的凹槽中出現(xiàn)一個(gè)紅點(diǎn),表示在該行上設(shè)置了斷點(diǎn)。
然后按F5
從標(biāo)準(zhǔn)庫(kù)頭文件的當(dāng)前行開(kāi)始執(zhí)行。執(zhí)行將中斷在cout
。如果您愿意,可以再次按F9
來(lái)切換斷點(diǎn)。
(五)設(shè)置watch
有時(shí),您可能希望在程序執(zhí)行時(shí)跟蹤變量的值。您可以通過(guò)在變量上設(shè)置一個(gè)watch
來(lái)做到這一點(diǎn)。
- 1.將插入點(diǎn)放在循環(huán)中。在
watch
窗口中,選擇加號(hào),并在文本框中輸入word
,這是循環(huán)變量的名稱?,F(xiàn)在,當(dāng)您步進(jìn)循環(huán)時(shí),查看Watch
窗口。 - 2.通過(guò)在循環(huán)之前添加下面的語(yǔ)句
int i = 0;
來(lái)添加另一個(gè)watch
,然后,在循環(huán)內(nèi)部添加如下語(yǔ)句++i;
?,F(xiàn)在為i
添加一個(gè)watch
,就像你在前面的步驟中做的那樣。 - 3.要在斷點(diǎn)上暫停執(zhí)行時(shí)快速查看任何變量的值,可以使用鼠標(biāo)指針將鼠標(biāo)懸停在該斷點(diǎn)上。
(六) C/C++配置
如果您想要更多地控制 C/C++擴(kuò)展,可以創(chuàng)建c_cpp_properties.json
文件,它將允許你改變?cè)O(shè)置,如編譯器的路徑,包括路徑,c++標(biāo)準(zhǔn)(默認(rèn)是c++ 17),以及更多。
您可以通過(guò)命令面板(Ctrl+Shift+P
)運(yùn)行命令C/C++: Edit Configurations (UI)
來(lái)查看C/C++配置UI。
這將打開(kāi)C/C++ Configurations
頁(yè)面。當(dāng)您在這里進(jìn)行更改時(shí),VS Code
將它們寫(xiě)入.vscode
文件夾中名為c_cpp_properties.json
的文件。Visual Studio Code
將這些設(shè)置放在.vscode\c_cpp_properties.json
中。如果你直接打開(kāi)那個(gè)文件,它應(yīng)該是這樣的:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
如果程序包含不在工作空間或標(biāo)準(zhǔn)庫(kù)路徑中的頭文件,則只需要添加到includePath
數(shù)組設(shè)置中。
6.1編譯器路徑
compilerPath
設(shè)置是配置中的一個(gè)重要設(shè)置。擴(kuò)展使用它來(lái)推斷c++標(biāo)準(zhǔn)庫(kù)頭文件的路徑。當(dāng)擴(kuò)展知道在哪里找到這些文件,它可以提供有用的功能,如智能補(bǔ)全和Go to Definition
導(dǎo)航。
C/C++擴(kuò)展嘗試根據(jù)它在系統(tǒng)上找到的編譯器位置來(lái)填充compilerPath
。該擴(kuò)展查找?guī)讉€(gè)常見(jiàn)的編譯器位置。compilerPath
的搜索順序是:
- 首先檢查Microsoft Visual c++ compiler
- 然后在Windows子系統(tǒng)(WSL)上查找g++
- 然后是Mingw-w64的g++。
如果安裝了g++或WSL,可能需要更改compilerPath
以匹配項(xiàng)目的首選編譯器。對(duì)于Microsoft c++,路徑應(yīng)該像這樣,取決于你安裝的具體版本:“C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe”
。
(七)重用您的c++配置
VS Code現(xiàn)在配置為使用Microsoft c++編譯器。該配置應(yīng)用于當(dāng)前工作區(qū)。要重用配置,只需將JSON文件復(fù)制到一個(gè)新項(xiàng)目文件夾(工作區(qū))中的.vscode
文件夾中,并根據(jù)需要更改源文件和可執(zhí)行文件的名稱。
(八)在Developer Command Prompt外運(yùn)行VS Code
在某些情況下,在Visual Studio的Developer Command Prompt
中運(yùn)行VS Code是不可能的(例如,在通過(guò)SSH的遠(yuǎn)程開(kāi)發(fā)場(chǎng)景中)。在這種情況下,您可以使用以下tasks.json
配置在構(gòu)建期間自動(dòng)初始化Visual Studio的Developer Command Prompt
。
{
"version": "2.0.0",
"windows": {
"options": {
"shell": {
"executable": "cmd.exe",
"args": [
"/C",
// The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
"\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
"&&"
]
}
}
},
"tasks": [
{
"type": "shell",
"label": "cl.exe build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/Fe:",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}"
],
"problemMatcher": ["$msCompile"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
注意: VsDevCmd.bat
的路徑可能會(huì)因Visual Studio版本或安裝路徑的不同而不同。你可以通過(guò)打開(kāi)命令提示符并運(yùn)行dir "\VsDevCmd*" /s
來(lái)找到VsDevCmd.bat
的路徑。
(九)疑難解答
9.1無(wú)法識(shí)別術(shù)語(yǔ)“cl.exe”
如果你看到錯(cuò)誤”The term ‘cl.exe’ is not recognized as the name of a cmdlet, function, script file, or operable program”,這通常意味著您正在運(yùn)行Developer Command Prompt for Visual Studio
以外的Visual Studio和VSCode不知道cl.exe
編譯器的路徑。
VS Code必須從Visual Studio的Developer Command Prompt for Visual Studio
啟動(dòng),或者任務(wù)必須配置為在開(kāi)發(fā)人員命令提示符之外運(yùn)行。
你總是可以通過(guò)創(chuàng)建一個(gè)新終端Ctrl+Shift+``通過(guò)輸入cl命令來(lái)檢查你是否從Visual Studio的Developer Command Prompt for Visual Studio
啟動(dòng)。
9.2 fatal error C1034: assert.h: no include path set
在這種情況下,cll .exe
可以通過(guò)PATH
環(huán)境變量被VS Code
使用,但是VS Code
仍然需要從Visual Studio的Developer Command Prompt
啟動(dòng),或者配置為在Developer Command Prompt之外運(yùn)行。否則,cl.exe
無(wú)法訪問(wèn)重要的環(huán)境變量,如INCLUDE
。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-446782.html
參考目錄
https://code.visualstudio.com/docs/cpp/config-msvc文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-446782.html
到了這里,關(guān)于使用Microsoft C++編譯器配置VSCode的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!