VScode配置task和launch支持C++11

2023-05-16


title: VScode配置task和launch
date: 2022-12-12 20:57:26
cover:
categories: VisualCode
tags:

  • debug

VScode配置task和launch支持C++11

刚开始使用VScode一般都是使用默认的task和lunch配置去执行代码或者debug,一旦修改了相关目录或者改动一些参数,就会不停的提醒XXX文件不存在或者一些奇怪错误。今天就专门花时间研究了一下task和lunch怎么用

因为task和launch都是使用json编写,并且是用来启动编译器,所以需要一些 预备知识

  • 编译器相关参数
  • json语法

Task的配置

task就是你当前要执行的任务,如果不手动配置,vs会自动配置当前环境的编译任务

初次创建文件或者目录后,按下 F1键盘 会自动生成launch和task文件

默认task如下

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

以下是VS官方文档参数说明

  • label: The task’s label used in the user interface.
  • type: The task’s type. For a custom task, this can either be shell or process. If shell is specified, the command is interpreted as a shell command (for example: bash, cmd, or PowerShell). If process is specified, the command is interpreted as a process to execute.
  • command: The actual command to execute.
  • windows: Any Windows specific properties. Will be used instead of the default properties when the command is executed on the Windows operating system.
  • group: Defines to which group the task belongs. In the example, it belongs to the test group. Tasks that belong to the test group can be executed by running Run Test Task from the Command Palette.
  • presentation: Defines how the task output is handled in the user interface. In this example, the Integrated Terminal showing the output is always revealed and a new terminal is created on every task run.
  • options: Override the defaults for cwd (current working directory), env (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes.
  • runOptions: Defines when and how a task is run.

在配置文件下使用 CTRL+空格键 触发候选项。

我们修改的主要由这几项

  • label
  • command
  • args

label

在这里插入图片描述

图中显示的名字就是定义的 label

command

command为执行任务所使用的命令,在linux下如果用gcc或者clang可以使用

which gcc
which clang

查看当前使用编译器的文件路径。比如我要使用brew安装的clang,可以修改为

"command": "/opt/homebrew/opt/llvm/bin/clang++"

更换为你要使用的编译器即可

args

args为当前编译器的参数,配合vs相关变量使用,这里列出一些常用的变量

  • ${userHome} - the path of the user’s home folder
  • ${workspaceFolder} - the path of the folder opened in VS Code
  • ${workspaceFolderBasename} - the name of the folder opened in VS Code without any slashes (/)
  • ${file} - the current opened file
  • ${fileWorkspaceFolder} - the current opened file’s workspace folder
  • ${relativeFile} - the current opened file relative to workspaceFolder
  • ${relativeFileDirname} - the current opened file’s dirname relative to workspaceFolder
  • ${fileBasename} - the current opened file’s basename
  • ${fileBasenameNoExtension} - the current opened file’s basename with no file extension
  • ${fileDirname} - the current opened file’s dirname
  • ${fileExtname} - the current opened file’s extension
  • ${cwd} - the task runner’s current working directory upon the startup of VS Code
  • ${lineNumber} - the current selected line number in the active file
  • ${selectedText} - the current selected text in the active file
  • ${execPath} - the path to the running VS Code executable
  • ${defaultBuildTask} - the name of the default build task
  • ${pathSeparator} - the character used by the operating system to separate components in file paths

编译器的参数可以参考https://www.runoob.com/w3cnote/gcc-parameter-detail.html

"args": [
	"-g",
	"${file}",
	"-o",
   "${fileDirname}/temp/${fileBasenameNoExtension}", //生成的文件放在temp目录下
	"-std=c++17"	//支持c++17
],

如果要使用c++11特性,可以在这里添加相关参数

其它参数

其他参数参照VS官方文档按需配置,基本C/C++的配置太不需要改动其他操作。

Launch

根据上文自动生成的task.json launch文件已经生成了,如果没有生成的话在debug界面点击生成launch

默认生成的文件如下

{
    "configurations": [
        {
            "name": "C/C++: g++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: g++ build active file"
        }
    ],
    "version": "2.0.0"
}

VS官方参考文档:https://code.visualstudio.com/docs/editor/debugging

这里我们要注意几个参数

  • program
  • MIMode
  • preLaunchTask

program

program参数表示可执行文件的位置,如果找不刀可执行文件,debug会报错。

这里一定注意 要和task中build任务生成目录一致

因为我的task中,输出的二进制文件在temp文件下,所以要修改program的位置

"program": "${fileDirname}/temp/${fileBasenameNoExtension}"

MIMode

这里指定要使用的调试程序

  • gdb
  • lldb

我使用的是llvm所以直接就写lldb即可

如果是gcc的话就是用gdb

preLaunchTask

这里指定的是launch前置任务,一般用于生成可调式的二进制文件

因为我们已经生成了一个task,我们直接调用前一个task即可。preLaunchTask的值与task的label的值相匹配

"preLaunchTask": "C/C++: g++ build active file"

现在开始调试你的程序吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VScode配置task和launch支持C++11 的相关文章

  • 根据文档列表查询 FireStore

    我有一个List
  • ConcurrentDictionary.GetOrAdd 真的是线程安全的吗?

    我有这段代码 如果该任务是为相同的输入创建的 我想等待正在进行的任务 这是我正在做的事情的最小再现 private static ConcurrentDictionary
  • Installshield安装成功后,不启动exe

    我正在使用单个 MSI 项目 成功安装后 我选择复选框来启动我的软件 然后单击完成 即使我检查并单击 完成 它也不会启动我的软件 到目前为止 我发现确保启动目录有效的唯一方法是 启动产品 复选框的属性选项卡 其属性设置为 LAUNCHPRO
  • Visual Studio 2015 - 用户任务消失了?

    我最近从 Visual Studio 2013 切换到 2015 并转换了所有旧项目 但是 现在我似乎找不到我的用户任务了 任务列表中曾经有一个下拉菜单 但看起来在新版本中已经消失了 除非我遗漏了一些东西 用户任务是否被删除 如果是这样 我
  • 如何在 C# 中从另一个应用程序启动一个应用程序?

    我有两个桌面应用程序 关闭第一个应用程序后 第一个应用程序将启动第二个应用程序 完成第一次申请后如何开始第二次申请 我的第一个应用程序创建了一个单独的桌面 Use the 工艺类 http msdn microsoft com en us
  • Windows终端:打开多个窗格并执行指定命令

    我最近下载了新的Windows Terminal 我已经创建了用于打开多个窗格的快捷方式 工作正常 但是 我正在尝试为相应的窗格执行命令 wt d
  • Selenium:启动网站后我们如何检查是否启动了正确的页面

    在 Selenium 中 启动网站后 我们如何检查是否启动了正确的页面 例子 如果我想启动www google com 运行代码后如何检查是否已启动同一页面 I used Assert assertEquals Correct web pa
  • 如何通过 async/await 找到哪个方法“挂起”?

    在 旧 时代 跟踪哪个方法挂起非常容易 只需转到调试器 点击 暂停 按钮并查看堆栈跟踪即可 然而 现在 如果问题出在异步方法中 则这种方法不起作用 因为要执行的下一段代码被埋在延续任务中的某个地方 从技术上讲 它甚至不会挂起 有没有办法这样
  • 如何使用ContinueWith正确管理任务中的异常

    在阅读有关任务和异常管理的信息后 我使用以下代码来管理任务中引发的异常 Task myTask Task Factory StartNew doTask CancellationToken None TaskCreationOptions
  • 无论如何,Task.Factory.StartNew 在 UI 线程上调用

    我必须处理一个奇怪的问题 至少从我的角度来看是这样 我使用任务来等待变量获取特定值 然后再次在 ui 线程上运行 继续 部分 现在的问题是 在我调用 StartNew 之前 调用内部的 ManagedThreadId 是相同的 它会冻结我的
  • 异步方法中的 Await 与 Task.Result [重复]

    这个问题在这里已经有答案了 执行以下操作有什么区别 async Task
  • 在 ASP.NET Core 上实现“Fire and Forget”方法的安全方法

    我正在尝试实现一个简单的日志记录库 该库将在多个项目中使用 库的工作是将 HTTP 请求发送到 ElasticSearch 这个库的要点是它不能等待响应 另外 我不关心任何错误 异常 它必须将请求发送到 ElasticSearch 并立即返
  • 启动屏幕故事板迁移问题

    我有一个用 Objective C 构建的应用程序 它使用启动屏幕图像集作为启动画面 根据最近苹果公司的新指南 适用于 iPhone 或 iPad 的应用程序必须使用 iOS 13 SDK 或更高版本构建 并且 使用 Xcode 故事板提供
  • 异步 ServiceController.WaitForStatus 如何执行?

    So ServiceController WaitForStatus https msdn microsoft com en us library system serviceprocess servicecontroller waitfo
  • JavaFX 任务线程未终止

    我正在编写一个 JavaFX 应用程序 我的对象扩展了 Task 以提供远离 JavaFX GUI 线程的并发性 我的主要课程如下所示 public class MainApp extends Application Override pu
  • 在 TPL 中返回空静态任务是一种不好的做法吗?

    在某些情况下 我想有条件地运行任务 我使用某种扩展方法 如下所示 public static class MyTaskExtension private static Task theEmptyTask Task Factory Start
  • 仅当 gradle 中另一个任务不是最新时才运行任务

    我想在 Gradle 中进行功能测试时自动添加 serverRun 任务 因此我添加了一个依赖项 funcTestTask dependsOn serverRun 无论 funcTestTask 是否运行 任务都会运行 compile se
  • 应用程序启动时立即隐藏导航栏

    基于以下代码片段 我能够隐藏状态栏当应用程序启动时 但不是导航栏 由后退 主页和任务管理器按钮组成的栏 因为它隐藏了稍后在 MainActivity 的线程完成加载后 这是清单
  • Gradle创建多项目Jar

    因此 从 Gradle 和 Android Studio 诞生之初起 我就一直在使用它们 然而 我发现自己用头撞墙的次数有时远远超过了它的价值 我花了一天半的时间试图解决我目前的困境 在我工作的地方 我们使用很多共享库项目 这意味着与 Gr
  • 如何以编程方式创建和暂停 Google App Engine 任务队列

    我正在使用 Google App Engine 并且一直在使用命名推送队列来处理一些任务 队列是使用queue xml 定义和配置的 没关系 现在我正在尝试做更多的事情 1 有没有办法动态创建和配置Java 中的新队列 动态 2 另外 一旦

随机推荐

  • 图像处理 - GLCM灰度共生矩阵如何计算

    因为最近要在OpenCV上试试各种图像分割算法的效果 xff0c 其中灰度共生算法没有办法直接调用库函数实现 xff0c 看了很多文章 xff0c 其中有一篇博文讲的很清楚 博主有提供原理和源码 xff0c 大家可以直接看原博 原文地址 x
  • SUSE12 Remote side unexpectedly closed network connection ,Connection reset by peer原因之一

    用工具新开ssh远程报错如下 xff1a 已连接的ssh中 xff0c telnet报错如下 同网段机器ssh命令报错如下 xff1a 在对比了同操作系统同文件的配置后 xff0c 排除了 etc hosts deny跟 etc hosts
  • xterm连接虚拟机里的ubuntu

    mobaxterm连接在虚拟机的abuntu 1 在Ubuntu上打开SSH服务 安装 openssh client 和 openssh server sudo apt get install openssh client sudo apt
  • 图解Linux命令之--fdisk命令

    fdisk命令 gt 磁盘分区管理工具 添加分区的流程 fdisk dev sda 选择要分区的硬盘 p 列出当前分区表 n 添加新分区 回车 选择开始的块地址 直接回车默认就可以了 43 2G 输入要添加分区的大小 43 200M xff
  • 安装docker-compose报ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we c

    在CentOS7中 xff0c 如果python版本为3 x xff0c 在安装docker compose时会报错 xff1a ERROR Cannot uninstall PyYAML It is a distutils install
  • PostgreSql | 数据库 |自定义函数的设计和实现

    前言 xff1a 数据库中的函数概念 和开发语言 xff0c Java xff0c PHP xff0c Python等等类似 xff0c 关系型数据库也是有函数的 xff0c 函数指的是动态的封装一部分特定功能的集合 例如 xff0c 查询
  • 元学习系列(一):Siamese Network(孪生网络)

    目前有一种说法认为 xff0c 深度学习模型在数据量较大的情况下才能取得较好的效果 xff0c 当数据量较少 xff0c 更偏向于使用传统的机器学习模型 想办法从深度学习的方向构建模型 xff0c 使得模型在数据量较小的情况下也能取得较好效
  • SpringBoot整合MybatisPlus时“注入失败”的问题记录

    问题情景 xff1a 最近将几个小的Demo整合在一起 xff0c 其中项目A使用Mybatis项目B使用Mybatis plus 在正常的修改完application yml xff0c pom文件后尝试启动项目 xff0c 启动失败 报
  • VasSonic之流式拦截

    VasSonic之流式拦截 VasSonic框架用到了流式拦截和增量更新技术 xff0c 下面只简单介绍流式拦截 xff0c 详细参考 xff1a https github com Tencent VasSonic wiki 一 xff09
  • 全文搜索引擎 Elasticsearch 入门

    全文搜索属于最常见的需求 xff0c 开源的 Elasticsearch xff08 以下简称 Elastic xff09 是目前全文搜索引擎的首选 它可以快速地储存 搜索和分析海量数据 维基百科 Stack Overflow Github
  • Ubuntu16.04 安装,更新与卸载Docker CE

    Ubuntu16 04 安装 xff0c 更新与卸载Docker CE 污污老师 关注 2017 11 14 23 40 字数 1019 阅读 3079评论 0喜欢 1 Docker CE 17 09 操作系统要求 xff1a 一个64位的
  • 零基础学习OpenGL(八)--立方体贴图、天空盒、环境映射

    立方体贴图 将多个纹理组合起来映射到一张纹理上的一种纹理类型 xff1a 立方体贴图 Cube Map 立方体贴图 xff1a 一个包含了6个2D纹理的纹理 xff0c 每个2D纹理都组成了立方体的一个面 xff1a 一个有纹理的立方体 之
  • Centos7下VNC离线安装(个人纪录)

    Centos7下VNC离线安装 个人纪录 1 官网下载rpm包 下载地址 2 执行安装命令 xff1a rpm Uvh tigervnc server 1 8 0 17 el7 x86 64 rpm 3 检查安装情况 xff1a rpm q
  • thinclient_drives

    ubuntu上安装xrdp搭建远程桌面 xff0c 后面远程桌面是可以了 xff0c 但是用户目录下生出了一个thinclient drives文件夹 xff0c 无论是不是root都不能删除 xff0c 如果你有强迫症 xff0c 你就感
  • 解决虚拟机下的ubuntu不能上网的问题

    解决虚拟机下的ubuntu不能上网的问题 2017年09月25日 19 31 39 ray7777777777 阅读数 xff1a 3676 1 打开虚拟机VM 2 右键ubuntu 设置 网络适配器 选中NAT模式 xff1a 用于共享主
  • 云原生|kubernetes|rancher-2.6.4安装部署简明手册

    前言 rancher是一个比较特殊的开源的kubernetes管理工具 xff0c 特殊在它是一个名称为k3s的简单kubernetes集群 xff0c 而该集群是在kubernetes集群内的 rancher还可以在一个裸的仅具有dock
  • Arch安装TIM并解决无法输入中文的常见问题

    花了两个小时的时间解决linux tim无法输入中文的问题 xff0c 最后直接重装系统对比前后配置解决问题 我觉得这种事情应该是十分钟就能搞定的 xff0c 突然想起高中政治老师之前说过的一个问题 一个人的汽车坏了 xff0c 他去修车
  • Arch使用vs code编译调试C/C++

    Arch使用vs code编译调试C C 43 43 Windows平台下无脑下一步编译器就安装好了 xff0c 转到linux平台下基本没有无脑下一步这种操作 xff0c 这个时候就需要手动配置相关程序IDE 43 GCC xff0c 去
  • vim使用coc 补全代码

    coc项目地址 https github com neoclide coc nvim coc安装 使用Vim Plugin安装coc vim 在vimrc中添加插件 34 Use release branch recommend 推荐使用
  • VScode配置task和launch支持C++11

    title VScode配置task和launch date 2022 12 12 20 57 26 cover categories VisualCode tags debug VScode配置task和launch支持C 43 43 1