为Microsoft C ++配置VSCode

来源: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文档库中提交本教程的问题。

先决条件

要成功完成本教程,您必须执行以下操作:

  1. 安装Visual Studio代码

  2. 为VS Code安装C ++扩展

  3. 安装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提示符没有设置必要的环境变量。

  1. 要打开VS的Developer Command Prompt,请开始在Windows“开始”菜单中键入“ Developer”,您应该看到它出现在建议列表中。确切名称取决于您安装的Visual Studio或Visual Studio Build Tools版本。单击该项目以打开提示。
  1. 在开发人员命令提示符下,创建一个名为“ 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 (调试器设置)

配置编译器路径

  1. 按Ctrl + Shift + P打开命令面板。看起来像这样:
  1. 开始键入“ C / C ++”,然后从建议列表中选择“ 编辑配置”(UI)。这将打开“ C / C ++配置”页面。当您在此处进行更改时,VS Code会将其写入到c_cpp_properties.json.vscode文件夹中的文件中。
  1. 找到编译器路径设置。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,您将在本教程的后面看到一些示例。

  2. 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)以基于源代码创建可执行文件。

  1. 从主菜单中,选择“ 视图”>“命令面板”,然后键入“任务”,然后选择“ 任务:配置默认构建任务”。在下拉列表中,选择“ 从模板创建Task.json文件”,然后选择“ 其他”。VS Code创建一个最小tasks.json文件,并在编辑器中将其打开。

  2. 继续,并使用以下代码片段替换整个文件内容:

{
  "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.exeMSVC编译器。该args数组指定将传递给上一步中指定的编译器的命令行参数。它们必须以编译器期望的顺序出现。在此示例中,我们指定异常处理模式(EHsc),并告诉编译器生成带符号的调试版本(Zi)。该/Fe:参数告诉编译器将可执行文件命名为“ helloworld.exe”。

group值指定当您按Ctrl + Shift + B时将运行此任务。

配置调试设置

接下来,您将创建一个launch.json文件,以配置VS Code以在按F5调试程序时启动调试器。

  1. 从主菜单中,选择“ 调试”>“添加配置...”,然后选择“ 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文件夹,然后根据需要更改源文件和可执行文件的名称。

其余步骤作为可选练习提供,以帮助您熟悉编辑和调试经验。

添加源代码文件

  1. 在文件资源管理器中选择“ HELLOWORLD”文件夹。右键单击窗格,然后从上下文菜单中选择“ 新建文件 ”。命名文件helloworld.cpp。确保文件不在.vscode子文件夹中。

  2. 粘贴此源代码:

    #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;
    }
    
  3. 现在按Ctrl + S保存文件。现在注意,我们刚刚编辑的所有文件如何显示在VS Code左侧面板的File Explorer视图中:

该面板还用于源代码控制,调试,搜索和替换文本以及管理扩展。左侧的按钮控制这些视图。我们将在本教程的后面部分中查看调试视图”。您可以在VS Code文档中找到有关其他视图的更多信息。

探索智能感知

在新helloworld.cpp文件中,将鼠标悬停在vector或上string以查看类型信息。声明msg变量后,开始msg.像调用成员函数时一样键入内容。您应该立即看到一个显示所有成员函数的完成列表,以及一个显示该msg对象的类型信息的窗口:

您可以按TAB键插入选定的成员。然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。

编译程序

  1. 要运行您在中定义的构建任务,请tasks.json按Ctrl + Shift + B或从主菜单中选择“ 视图”>“命令面板”,然后开始键入“任务:运行构建任务”。该选项将在您完成键入之前出现。

    注意:如果看到如下错误消息:cl.exe:未找到命令,则表明您尚未从VS的开发人员命令提示符启动VS代码。有关更多信息,请参见本教程的第一部分。

  2. 任务开始时,您应该看到集成的Terminal窗口出现在代码编辑器下方。任务完成后,终端将显示编译器的输出,指示构建成功还是失败。对于成功的MSVC构建,输出如下所示:

  1. 按照消息指示,按任意键以关闭构建消息。终端现在返回到shell命令提示符。

开始调试会话

  1. 您现在可以运行该程序了。按F5或从主菜单中选择“ 调试”>“开始调试”。在开始逐步执​​行代码之前,让我们花一点时间注意用户界面中的一些更改:
  • 代码编辑器突出显示该main方法的第一行。这是C ++扩展自动为您设置的断点:
  • 现在,左侧的工作区窗格显示了调试信息,但由于没有任何程序语句(除了一些系统启动代码)已被执行,因此没有任何有用的信息,这反映在“线程”窗口中:
  • 在代码编辑器的顶部,将显示一个调试控制面板。您可以通过抓住左侧的点在屏幕上移动它。

单步执行代码

现在,我们准备开始逐步执​​行代码。

  1. 单击或按调试控制面板中的“ 跳过”图标,直到for (const string& word : msg)突出显示该语句。
该**步骤在**命令跳过所有内的内部功能调用`vector`和`string`所述时调用类`msg`创建并初始化变量。注意左侧“ **变量”**窗口中的更改。在这种情况下,可能会出现错误,因为尽管调试器现在可以看到循环的变量名,但该语句尚未执行,因此此时无任何内容可读取。的内容`msg`是可见的,但是,因为该声明已完成。
  1. 再次按Step over前进到该程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)。现在,“ 变量”窗口显示有关循环变量的信息。

  2. 再次按Step over执行cout语句。注意自扩展程序的2019年3月版起,直到循环完成,才会显示任何输出。

  3. 如果愿意,可以继续按Step over,直到将引导程序中的所有单词都打印到控制台为止。但是,如果您感到好奇,请尝试按Step Into按钮以逐步浏览C ++标准库中的源代码!

要返回自己的代码,一种方法是按住“ 跳过”。另一种方法是通过helloworld.cpp在代码编辑器中切换到选项卡,将插入点放在cout循环内的语句中的某个位置,然后按F9来在代码中设置断点。在左侧的装订线中出现一个红点,指示已在此行上设置断点。

然后按F5键从标准库标题中的当前行开始执行。执行将中断cout。如果愿意,可以再次按F9键以关闭断点。

设置WATCH

有时,您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置WATCH来做到这一点。

  1. 将插入点放在循环内。在 “WATCH” 窗口中,单击加号,然后在文本框中键入word,这是循环变量的名称。现在,当您逐步执行循环时,请查看“监视”窗口。
  1. 通过在循环之前添加此语句来添加另一只手表int i = 0;。然后,在循环中,加上这样一句话:++i;。现在,i像上一步一样添加手表。

  2. 要在断点处暂停执行时快速查看任何变量的值,可以使用鼠标指针悬停在其上。

下一步

  • 浏览《VS Code用户指南》
  • 查看C ++扩展概述
  • 创建一个新的工作区,将您的.json文件复制到其中,为新的工作区路径,程序名称等调整必要的设置,然后开始编码!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容