来源:https://code.visualstudio.com/docs/cpp/config-msvc
100% google翻译
在本教程中,您将Visual Studio Code配置为在Windows上使用Microsoft C ++编译器和调试器。配置VS Code之后,您将编译并调试一个简单的程序以熟悉VS Code用户界面。完成本教程后,您将准备创建和配置自己的工作区,并浏览VS Code文档以获取有关其许多功能的更多信息。本教程不会教您有关Windows或Microsoft C ++工具集或C ++语言的详细信息。对于这些主题,Web上有许多不错的资源。
如果您有任何问题,请随时在VS Code文档库中提交本教程的问题。
先决条件
要成功完成本教程,您必须执行以下操作:
-
安装Microsoft C ++(MSVC)编译器工具集。
- 如果您使用的是Visual Studio的最新版本,请从Windows的“开始”菜单中打开“ Visual Studio安装程序”,并验证是否选中了C ++工作负载。如果尚未安装,请选中该框,然后在安装程序中单击“ 修改”按钮。
- 或者,通过单击“ 下载”页面上的“ Visual Studio构建工具”链接来下载独立工具集,然后按照提示进行操作。使用默认设置,下载大小约为1GB,磁盘大小约为4GB。如果您不需要CMake支持(及其依赖的Windows SDK),则磁盘上的大小应约为3GB。
从开发人员命令提示符启动VS代码
要在VS Code中使用MSVC,必须从Visual Studio的开发人员命令提示符启动VS Code 。普通的Windows命令提示符或Bash提示符没有设置必要的环境变量。
- 要打开VS的Developer Command Prompt,请开始在Windows“开始”菜单中键入“ Developer”,您应该看到它出现在建议列表中。确切名称取决于您安装的Visual Studio或Visual Studio Build Tools版本。单击该项目以打开提示。
- 在开发人员命令提示符下,创建一个名为“ projects”的空文件夹,您可以在其中存储所有VS Code项目,然后创建一个名为“ helloworld”的子文件夹,导航至
code
该文件夹,并.
通过输入以下内容在该文件夹()中打开VS Code()。以下命令:
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
该代码。命令在当前工作文件夹(即您的工作空间)中打开VS Code 。在获得IntelliSense支持或编译和调试代码之前,我们必须为MSVC配置VS Code。完成配置后,我们将在.vscode
子文件夹中包含三个文件:
-
c_cpp_properties.json
(编译器路径和IntelliSense设置) -
tasks.json
(制作说明) -
launch.json
(调试器设置)
配置编译器路径
- 按Ctrl + Shift + P打开命令面板。看起来像这样:
- 开始键入“ C / C ++”,然后从建议列表中选择“ 编辑配置”(UI)。这将打开“ C / C ++配置”页面。当您在此处进行更改时,VS Code会将其写入到
c_cpp_properties.json
.vscode文件夹中的文件中。
-
找到编译器路径设置。VS Code会根据在系统上找到的内容尝试使用默认编译器填充它。它首先查找MSVC编译器,然后在Windows Subsystem for Linux(WSL)上查找g ++,然后在Mingw-w64上查找g ++。对于MSVC,路径应类似于以下内容,具体取决于您安装的特定版本:“ C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe”。
该编译器的路径设置是配置中的最重要的设置。该扩展使用它来推断C ++标准库头文件的路径。当扩展知道在哪里可以找到那些文件时,它可以在您编写代码时为您提供许多有用的信息。此信息称为IntelliSense,您将在本教程的后面看到一些示例。
将IntelliSense模式设置为
${default}
,在Windows上为msvc-x64
。
仅当程序包含不在工作空间或标准库路径中的头文件时,才需要修改“ 包含路径”设置。
Visual Studio代码将这些设置放在中.vscode/c_cpp_properties.json
。如果直接打开该文件,则其外观应如下所示(取决于您的特定路径):
{
"configurations": [
{
"name": "Win32",
"defines": ["_DEBUG", "UNICODE", "_UNICODE"],
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
"windowsSdkVersion": "10.0.17763.0",
"intelliSenseMode": "msvc-x64",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
创建一个构建任务
接下来,创建一个tasks.json
文件来告诉VS Code如何构建(编译)程序。该任务将调用Microsoft C ++编译器(cl.exe)以基于源代码创建可执行文件。
从主菜单中,选择“ 视图”>“命令面板”,然后键入“任务”,然后选择“ 任务:配置默认构建任务”。在下拉列表中,选择“ 从模板创建Task.json文件”,然后选择“ 其他”。VS Code创建一个最小
tasks.json
文件,并在编辑器中将其打开。继续,并使用以下代码片段替换整个文件内容:
{
"version": "2.0.0",
"tasks": [
{
"label": "msvc build",
"type": "shell",
"command": "cl.exe",
"args": ["/EHsc", "/Zi", "/Fe:", "helloworld.exe", "helloworld.cpp"],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always"
},
"problemMatcher": "$msCompile"
}
]
}
该label
值将在VS Code命令面板中使用,并且可以是您喜欢的任何名称。该command
值表示我们正在使用cl.exe
MSVC编译器。该args
数组指定将传递给上一步中指定的编译器的命令行参数。它们必须以编译器期望的顺序出现。在此示例中,我们指定异常处理模式(EHsc),并告诉编译器生成带符号的调试版本(Zi)。该/Fe:
参数告诉编译器将可执行文件命名为“ helloworld.exe”。
该group
值指定当您按Ctrl + Shift + B时将运行此任务。
配置调试设置
接下来,您将创建一个launch.json
文件,以配置VS Code以在按F5调试程序时启动调试器。
- 从主菜单中,选择“ 调试”>“添加配置...”,然后选择“ C / C ++ Windows(启动)”。这将导致
launch.json
文件被创建和打开。用这个替换文件的内容
{
"version": "0.2.0",
"configurations": [
{
"name": "(msvc) Launch",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/helloworld.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
}
]
}
请注意,程序名称helloworld.exe
与我们在中指定的名称匹配tasks.json
。
默认情况下,C ++扩展名在的第一行添加了一个断点main
。该stopAtEntry
值设置为true
使调试器在该断点处停止。false
如果您希望忽略它,可以将其设置为。
VS Code现在已配置为使用Microsoft C ++编译器。该配置适用于当前工作空间。要重用配置,只需将三个JSON文件复制到新工作区中的.vscode文件夹,然后根据需要更改源文件和可执行文件的名称。
其余步骤作为可选练习提供,以帮助您熟悉编辑和调试经验。
添加源代码文件
在文件资源管理器中选择“ HELLOWORLD”文件夹。右键单击窗格,然后从上下文菜单中选择“ 新建文件 ”。命名文件
helloworld.cpp
。确保文件不在.vscode
子文件夹中。-
粘贴此源代码:
#include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> msg {"Hello", "C++", "World", "from", "VS Code!"}; for (const string& word : msg) { cout << word << " "; } cout << endl; }
现在按Ctrl + S保存文件。现在注意,我们刚刚编辑的所有文件如何显示在VS Code左侧面板的File Explorer视图中:
该面板还用于源代码控制,调试,搜索和替换文本以及管理扩展。左侧的按钮控制这些视图。我们将在本教程的后面部分中查看 “ 调试视图”。您可以在VS Code文档中找到有关其他视图的更多信息。
探索智能感知
在新helloworld.cpp
文件中,将鼠标悬停在vector
或上string
以查看类型信息。声明msg
变量后,开始msg.
像调用成员函数时一样键入内容。您应该立即看到一个显示所有成员函数的完成列表,以及一个显示该msg
对象的类型信息的窗口:
您可以按TAB键插入选定的成员。然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。
编译程序
-
要运行您在中定义的构建任务,请
tasks.json
按Ctrl + Shift + B或从主菜单中选择“ 视图”>“命令面板”,然后开始键入“任务:运行构建任务”。该选项将在您完成键入之前出现。注意:如果看到如下错误消息:cl.exe:未找到命令,则表明您尚未从VS的开发人员命令提示符启动VS代码。有关更多信息,请参见本教程的第一部分。
任务开始时,您应该看到集成的Terminal窗口出现在代码编辑器下方。任务完成后,终端将显示编译器的输出,指示构建成功还是失败。对于成功的MSVC构建,输出如下所示:
- 按照消息指示,按任意键以关闭构建消息。终端现在返回到shell命令提示符。
开始调试会话
- 您现在可以运行该程序了。按F5或从主菜单中选择“ 调试”>“开始调试”。在开始逐步执行代码之前,让我们花一点时间注意用户界面中的一些更改:
- 代码编辑器突出显示该
main
方法的第一行。这是C ++扩展自动为您设置的断点:
- 现在,左侧的工作区窗格显示了调试信息,但由于没有任何程序语句(除了一些系统启动代码)已被执行,因此没有任何有用的信息,这反映在“线程”窗口中:
- 在代码编辑器的顶部,将显示一个调试控制面板。您可以通过抓住左侧的点在屏幕上移动它。
单步执行代码
现在,我们准备开始逐步执行代码。
- 单击或按调试控制面板中的“ 跳过”图标,直到
for (const string& word : msg)
突出显示该语句。
该**步骤在**命令跳过所有内的内部功能调用`vector`和`string`所述时调用类`msg`创建并初始化变量。注意左侧“ **变量”**窗口中的更改。在这种情况下,可能会出现错误,因为尽管调试器现在可以看到循环的变量名,但该语句尚未执行,因此此时无任何内容可读取。的内容`msg`是可见的,但是,因为该声明已完成。
再次按Step over前进到该程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)。现在,“ 变量”窗口显示有关循环变量的信息。
再次按Step over执行
cout
语句。注意自扩展程序的2019年3月版起,直到循环完成,才会显示任何输出。如果愿意,可以继续按Step over,直到将引导程序中的所有单词都打印到控制台为止。但是,如果您感到好奇,请尝试按Step Into按钮以逐步浏览C ++标准库中的源代码!
要返回自己的代码,一种方法是按住“ 跳过”。另一种方法是通过helloworld.cpp
在代码编辑器中切换到选项卡,将插入点放在cout
循环内的语句中的某个位置,然后按F9来在代码中设置断点。在左侧的装订线中出现一个红点,指示已在此行上设置断点。
然后按F5键从标准库标题中的当前行开始执行。执行将中断cout
。如果愿意,可以再次按F9键以关闭断点。
设置WATCH
有时,您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置WATCH来做到这一点。
- 将插入点放在循环内。在 “WATCH” 窗口中,单击加号,然后在文本框中键入
word
,这是循环变量的名称。现在,当您逐步执行循环时,请查看“监视”窗口。
通过在循环之前添加此语句来添加另一只手表
int i = 0;
。然后,在循环中,加上这样一句话:++i;
。现在,i
像上一步一样添加手表。要在断点处暂停执行时快速查看任何变量的值,可以使用鼠标指针悬停在其上。
下一步#
- 浏览《VS Code用户指南》。
- 查看C ++扩展概述。
- 创建一个新的工作区,将您的.json文件复制到其中,为新的工作区路径,程序名称等调整必要的设置,然后开始编码!