VSCode的C/C++扩展功能

  • 1. 在 Linux 上 使用 C++
    • 1.1 创建 Hello World
    • 1.2 探索 IntelliSense
    • 1.3 构造 helloworld.cpp
      • 1.3.1 运行 build
      • 1.3.2 修改 tasks.json
    • 1.4 Debug helloworld.cpp
      • 1.4.1 启动调试会话
    • 1.5 一步步执行代码
    • 1.6 设置一个 Watch
    • 1.7 C/C++ 配置
  • 2. 一些快捷键
    • 2.1 导航到当前源文件中的一个特定的符号(Ctrl+P, @符号名称)
    • 2.2 导航到其他源文件中的一个特定的符号(Ctrl+P, #符号名称)
    • 2.3 转到定义(F12)
    • 2.4 查看定义(Alt + F12)
    • 2.5 Ctrl + 光标悬停

Reference:

  1. Visual Studio Code的C/C++扩展功能
  2. Using C++ on Linux in VS Code

1. 在 Linux 上 使用 C++

1.1 创建 Hello World

从 terminal 窗口,创建一个叫做 projects 的空文件夹来存储 VS Code 项目。然后创建一个叫做 helloworld 的子文件夹,导航到里面后,输入最下面的命令打开 VS Code:

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

code . 命令打开当前文件夹下的 VS Code,也就是 ”workspace“。在该 workspace 内的 .vscode 文件夹下会创建三个文件:

  • tasks.json (compiler build 设置)
  • launch.json (debugger 设置)
  • c_cpp_properties.json (compiler path and IntelliSense 设置)

创建文件 helloworld.cpp 并复制以下源代码:

#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;
}

1.2 探索 IntelliSense

helloworld.cpp 文件中,将鼠标悬停在 vectorstring 上查看类型信息。在申明 msg 变量后面,开始输入 msg.。这时看到一个显示所有成员函数的补全列表,以及一个显示 msg 对象类型信息的窗口:
Tab 键插入选中的成员。然后,当添加开括号时,会看到关于函数所需参数的信息。

1.3 构造 helloworld.cpp

这时需要创建一个 tasks.json 文件来告诉 VS Code 如何构造(搭建)该程序。这个文件会唤醒 g++ 编译器,并从源代码创建一个可执行文件

在编辑器中打开 helloworld.cpp 非常重要,因为下一步将使用上下文编辑器中的 active file(活动文件:该文件处于可编辑或更改状态,内容、大小及属性都是可以随时间变化的) 来创建下一步的构建任务:
在主菜单中,选择 Terminal > Configure Default Build Task。下拉菜单显示了C++编译器的各种预定义构建任务,这里选择 C/C++: g++ build active file。
这里会在 .vscode 文件夹内创建一个 tasks.json 文件并在编译器内打开它。这时的 tasks.json 文件看起来应该跟下面的 JSON 相似:

{"version": "2.0.0","tasks": [{"type": "shell","label": "g++ build active file","command": "/usr/bin/g++","args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "/usr/bin"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true}}]
}

可以在variables reference了解更多关于 task.json 变量。

command 设置指定要运行的程序;在本例中,使用的是 g++。args 数组指定将传递给 g++ 的命令行参数。这些参数必须按照编译器期望的顺序指定。

这个文件告诉 g++ 获取 active file(${file}),编译它,并在当前目录(${fileDirname})中创建一个与 active file 同名但没有扩展名(${fileBasenameNoExtension})(比如.exe等)的可执行文件,从而得到示例中的 helloworld

label 的值是会在 tasks list 中看到的,可以给它随便命名。

group 对象中的 "isDefault": true 值指定该任务将在按下 Ctrl+Shift+B 时运行。这个属性只是为了方便;如果将这个值设置为 false,仍然可以从终端菜单的 Tasks: Run Build Task 运行它。

1.3.1 运行 build

  1. 回到 helloworld.cpp。现在的任务是搭建 active file,这时想要搭建 helloworld.cpp
  2. 为了运行定义在 tasks.json 内的 build task,按下 Ctrl+Shift+B 或者从主菜单 Terminal 选择 Run Build Task。
  3. 当任务开始时,会看到集成终端面板出现在源代码编辑器下面。任务完成后,终端显示编译器的输出,指示构建是成功还是失败。对于一个成功的 g++ 构建,输出如下所示:
  4. 使用 + 按钮创建一个新的终端,将会拥有一个运行默认 shell 的终端,并将 helloworld 文件夹作为工作目录。运行 ls,应该看到可执行文件 helloworld(没有文件扩展名)。
  5. 可以通过输入 ./helloworld 在终端运行 helloworld

1.3.2 修改 tasks.json

也可以修改 tasks.json 文件,用 "${workspaceFolder}/*.cpp" 替代 ${file} 来构建多个 C++ 文件。也可以通过用硬编码的文件名(例如helloworld.out)替换 "${fileDirname}/${fileBasenameNoExtension}" 来修改输出文件名。

1.4 Debug helloworld.cpp

接下来,将创建一个 launch.json 文件。当按下 F5 调试程序时,VS Code 将启动 GDB 调试器。

从主菜单上,选择 Run > Add Configuration,然后选择 C++ (GDB/LLDB)。

然后,会看到一个用于各种预定义调试配置的下拉菜单。选择 g++ build and debug active file。这时 VS Code 创建了一个 launch.json 文件。在编辑器中打开它,并搭建和运行 ‘helloworld’。

{"version": "0.2.0","configurations": [{"name": "g++ build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "g++ build active file","miDebuggerPath": "/usr/bin/gdb"}]
}

在上面的 JSON,prgoram 指定想要去 debug 的程序。在这里,它被设置为 active file folder ${fileDirname} 和没有扩展名的 active filename ${fileBasenameNoExtension},如果 helloworld.cpp 是所需的 active file,那就是 helloworld

默认情况下,C++ 扩展不会向源代码添加任何断点,stopAtEntry 值设置为 false

stopAtEntry 值更改为 true,以使调试器在开始调试时main 方法上停止。

1.4.1 启动调试会话

  1. 返回 hellloworld.cpp 使得该程序变为 active file。
  2. 按下 F5 或从主菜单中选择 Run > Start Debugging。在开始逐步分析代码之前,让我们花点时间注意用户界面中的几个变化:
  • 集成终端显示在源代码编辑器的底部。在 Debug Output 选项中,可以看到显示调试器已启动并正在运行的输出。
  • 编辑器高亮 main 方法中的第一个语句。这是 C++ 扩展自动为您设置的一个断点:
  • 在左侧的“Run”视图中显示调试信息。将在本教程后面看到一个示例。
  • 在代码编辑器的顶部,出现一个调试控制面板。可以通过抓取左边的点在屏幕上移动它。

1.5 一步步执行代码

现在开始一步步执行代码:

  1. 点击调试控制面板上的 Step over 图标。

    这将把程序执行推进到 for 循环的第一行,并跳过在创建和初始化 msg 变量时调用的 vectorstring 类中的所有内部函数调用。注意旁边变量窗口中的变化。
  2. 再次按 Step over 键进入程序中的下一条语句(跳过所有用于初始化循环的内部代码)。现在,Variables 窗口显示了关于循环变量的信息。
  3. 再次按Step执行cout语句。(请注意,在2019年3月发布的版本中,c++扩展在最后一次cout执行之前不会向调试控制台输出任何输出。)
  4. 如果愿意,可以一直按 Step over 键,直到向量中的所有单词都被打印到控制台上。但如果您对此感到好奇,请尝试按 Step Into 按钮来逐步浏览 C++ 标准库中的源代码!

    要返回到自己的代码,一种方法是一直按 Step over。另一种方法是在代码中设置断点,方法是切换到代码编辑器中的 helloworld.cpp 标签,将插入点放在循环中 cout 语句的某个位置,然后按F9。左边的 gutter 中出现一个红点,表示已在该行设置了断点。

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

    当循环完成时,您可以在集成终端的 Debug Console 选项卡中看到输出,以及由 GDB 输出的其他一些诊断信息。

1.6 设置一个 Watch

要在程序执行时跟踪变量的值,请对该变量设置一个 watch。

  1. 将插入点放置在循环内部。在 watch 窗口中,单击加号,并在文本框中输入 word,这是循环变量的名称。现在,在遍历循环时查看 Watch 窗口。
  2. 要在断点上暂停执行时快速查看任何变量的值,可以使用鼠标指针悬停在该变量上。

1.7 C/C++ 配置

如果要更好地控制 C/C++ extension,可以创建一个 c_cpp_properties.json 文件,该文件将允许更改设置,例如编译器的路径、包含路径、C++标准(默认值为 C++17)等。

可以通过运行命令面板(Ctrl+Shift+P)中的命令 C/C++: Edit Configurations (UI) 来查看 C/C++ 配置 UI。

这将打开 C/C++ Configurations 页。在此处进行更改时,VS Code 会将它们写入 .vscode 文件夹中名为 c_cpp_properties.json 的文件。

仅当程序包含不在工作区或标准库路径中的头文件时,才需要修改 Include path 设置。

VS Code 将这些设置放在 .vscode/c_cpp_properties.json 中。如果直接打开该文件,它应该如下所示:

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "clang-x64"}],"version": 4
}

2. 一些快捷键

2.1 导航到当前源文件中的一个特定的符号(Ctrl+P, @符号名称)

2.2 导航到其他源文件中的一个特定的符号(Ctrl+P, #符号名称)

2.3 转到定义(F12)

2.4 查看定义(Alt + F12)

2.5 Ctrl + 光标悬停


相关文章:
VSCode必备插件-C++等

VSCode的C/C++扩展功能相关推荐

  1. Vue开发常用的工具有哪些?

    相比其他大型框架,Vue更加灵活,开发者既可以选择使用Vue来开发一个全新项目,也可以将Vue引入到一个现有的项目中.代码简洁.上手容易,深受开发者青睐.本节我们将对Vue的开发环境以及常用工具的使用 ...

  2. PyCharm vs VSCode,是时候改变你的 IDE 了!

    作者 | Sohaib Ahmad 译者 | 鹿未来,责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 也许是我有些落伍,或者也是因为JetBrain ...

  3. vscode 预览图片 插件_真的动手写的VSCode的插件(图片浏览)之1

    由于本职工作中经常做图像处理,于时大量的图片浏览是不可避免的. 怎么样不离开最近经常使用的VSCode,同时去看大量的图像对我来讲就是个不错的需求,尤其是某个目录下的文件. 先谈基本的需求吧,显示一个 ...

  4. vscode主题 webstorm_从 Emacs 和 Vim 到 VSCode

    在很长一段时间里,我都在使用 Emacs 作为我的主力编辑器,所用到的 配置 后来则主要是基于 子龙山人 以及他的 Spacemacs-rocks 系列 ,这些配置文件经过碎月累年的魔改和持续发酵,伴 ...

  5. git merge 回退_git+vscode进行版本控制

    Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.Git 与 SVN,CVS等其它版本控制系统最核心的区别:Git 是分布式的 首先在官网上下载:https://git- ...

  6. VSCode 与 WebStorm 横向对比

    前言 不能认清自己,怎能看清别人? 最近很长一段时间,VSCode 似乎成为了前端口中的标准开发编辑器,前端圈到处都在推荐 VSCode,劝说其他人放弃 Sublime, WebStorm, Atom ...

  7. vscode/typora+picGo-core(命令行CLI)/picGo(GUI)+图片上传(github/smms)/批量上传/typora语法扩展渲染功能设置/修改本地图片存放位置配置

    文章目录 typora&vscode 性能对比(渲染速度) picgo_GUI中文环境 GUI data.json 总体配置文件 命令行任意环境 安装picgo-commandLine 配置文 ...

  8. PyCharm vs VSCode 到底谁更牛?

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 作者 | Sohaib Ahmad 译者 | 鹿未来,责编 | 屠敏 也许是我有些落伍 ...

  9. vsCode 源代码管理插件GitLens使用指南

    第一步 在vsCode的扩展功能里搜索GitLens.Git History 下载好插件后,会出现 第二步 查看分支情况 git branch 查看本地分支 git branch -a 查看当前所在分 ...

最新文章

  1. 最简洁粗暴版的虚拟用户配置FTP
  2. 获取视频的每一帧,并保存为.jpg图片
  3. shell脚本一键安装nginx
  4. 分布式系统——网络监视系统zabbix3.4.2,以及向zabbix中添加被监视主机(一)
  5. 微软作为金牌会员加入Cloud Foundry基金会
  6. 华为软件java笔试_华为软件笔试题4.10
  7. java多线程信息共享 多线程管理
  8. 《天天数学》连载12:一月十二日
  9. 关于阵列卡的配置参数Cache Policy(缓存策略)
  10. 4 拼接_3个孩子,64㎡小户型内“镶嵌”4室一厅,餐桌还能随意拼接
  11. 这几款好加密软件让你不再担心担心隐私泄露!
  12. VS 2008的64位编译环境的安装和使用
  13. “但问耕耘,莫问收获”才有机会“碰运气”——新书《成功与运气:好运和精英社会的神话》解读
  14. 网页中有大量图片加载很慢,用什么方法进行优化
  15. Google Play评论抓取
  16. 使用transition实现图片轮播效果
  17. win10修改用户名_ADAMS2020中/英版软件下载和安装教程|兼容WIN10
  18. SqlServer数据库误删除找回
  19. Java 集成阿里大鱼平台短信服务发送验证码 --- 补齐注册部分
  20. CSS核心内容:标准流、盒子模型、浮动、定位

热门文章

  1. 2. ceph 初识
  2. 玩游戏计算机缺失msvcp140,电脑丢失msvcp140.dll的解决方法 电脑缺少msvcp140.dll怎么解决...
  3. python打开电脑文件_python办公自动化:自动打开word文档-docx文件怎样打开
  4. 微信上传图片。【代码示例】
  5. 智能体脂称方案的实现
  6. CF#692 div2
  7. 为什么公司选择裁员,而不是降薪
  8. 什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数
  9. 什么是土壤水分传感器
  10. Android:代码撸彩妆 2(大眼,瘦脸,大长腿)