VSCode在linux服务器下launch.json和tasks.json等文件配置

2023-10-29

前言

用win下的VSCode远程连接linux服务器后,就可以用VSCode运行linux下代码了。

在编译运行代码前,按照VSCode的要求,我们要给编译和执行操作分别配置一堆参数。这就是launch.json和tasks.json配置的内容。

本文仅以linux举例,win下类似,无非是命令、路径名、环境变量有些区别。

launch.json

launch.json可以说是必配的配置了。该文件用来执行具体的可执行文件。

参考配置如下

{
    //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":"myexe : makefile build and debug",    //name随便取,用来在定义了多个configuration的时候区分执行的是哪一套参数。
            "type":"cppdbg",        //这个一般就不要改了,这个我还不了解其他的参数配置
            "request":"launch",    //这个一般就不要改了,这个我还不了解其他的参数配置
            "program":"${workspaceRoot}/myexe",    //执行这个文件,相当于命令行中输入这行
            "args":["param1","param2","2>&1",">","out"],    //program的参数,相当于命令行中在program后输入用空格隔开的这些参数。我这里前两个是执行文件自带的参数设置,后三个是将标准输出和标准错误输入到文件out中。
            "stopAtEntry":false,    //大概是表示是否在main函数处停下,类似在main上打断点。
            "cwd":"${workspaceRoot}",    //表示在哪个目录下执行program,相当于命令行中输入cd 该行
            "environment":[]            //不知道干嘛的
            //"externalConsole":true,    //如果使用控制台则需要打开这个。我这边加了这句后会有不知道在使用哪个控制台的问题,反正会很奇怪,就注释掉了。
            "MIMode":"gdb",            //使用哪个工具作为调试工具,只有两个选择gdb或lldb。lldb我不了解,和我一样不了解的人就写gdb吧。
            "miDebuggerPath":"/usr/bin/gdb",    //调试工具的路径
            "setupCommands":[    //gdb相关的一些设置命令,相当于在执行gdb后,对gdb下命令行的设置。gdb相关的初始化配置,要在~/.gdbinit文件中配置,或者在这配置,我另开一篇文章写,涉及下面enable-pretty-printing的,不一定开了就有用了,还涉及其他的问题,这里先放个TODO。
                {
                    "description":"Enable pretty-printing for gdb",    //给人看的描述
                    "text":"-enable-pretty-printing",        //gdb下执行的命令,启用整齐打印,就是让gdb打印的东西好看一点。
                    "ignoreFailures":true        //并不清楚这个实际用来干嘛
                },
                {
                    "description":"Let User defined signal 1 not appear",
                    "text":"handle SIGUSR1 nostop noprint",    //这个命令是我自己加的,因为我的程序会莫名奇妙出现调试时在非断点出停下的问题,用这个可以规避/忽视这个问题。
                    "ignoreFailures":true        //并不清楚这个实际用来干嘛
                }
            ],
            //"internalConsoleoptions":"openOnSessionstart",    //不知道干嘛的
            "preLaunchTask":"build"    //执行program前需要执行的task,这里需要和task.json中要执行的task的label一致
            //"preLaunchTask":""        //如果没有tasks.json,或者不需要执行前置task,则可以这样写,或不写这行。这种情况一般是你已经有了带调试信息的可执行文件,不要在再通过编译等操作得到了。
        }
    ]
}

tasks.json

tasks.json一般用来进行编译,一般来说只要按照VSCode给自动生成的代码写就可以了(没有自动生成的右下角一般有按钮可以点击选择生成哪种类型的编译方式)。下面的配置中前面注释部分是我环境上的一个自动生成的配置,但是由于我的项目通过其他方式生成了makefile,因此就直接通过makefile编译了。

下面的配置,由于launch.json的前置任务是build,所以会先调用build,再调用build的前置任务backup,再调用backup的前置任务make,最终的执行顺序就是make、backup、build。这种递归调用的方式和makefile的执行方式类似。

{
    "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": {
        //         "kind": "build",
        //         "isDefault": true
        //     },
        //     "detail": "Task generated by Debugger."
        // }
        // 下面每一个{}内都是一个task
        {
            "type": "shell",    //使用shell作为command的输入地方,其他值我也不清楚。
            "label": "make",    //标记task名字,launch.json和task.json中依赖的名字都是这个label。
            "command": "make",    //在shell中输入的命令,这里make调用makefile中命令进行编译
            "args": [            //command的参数
                "-j"            //这里-j是让make按照多个线程并行编译。
            ],
            "options": {
                "cwd": "${config:mypath}"    //该命令执行的绝对路径(必须是绝对路径),对于make命令来说,makefile应该事先在该路径下。${config:mypath}不是VSCode内置的变量名,在settings.json中定义。
            }
        },
        {
            "type": "shell",
            "label": "backup",
            "command": "cp",            // linux的复制命令
            "args": [                   // command的参数,将myexe复制到myexe_bak进行备份
                "myexe",            
                "myexe_bak"
            ],
            "options": {
                "cwd": "${config:mypath}"
            },
            "dependsOn": ["make"]      // 此task依赖于label为make的task,需要先执行label为make的task后,才能执行此task。make任务产生了一个可执行文件myexe。
        },
        {
            "type": "shell",
            "label": "build",
            "command":"cp",
            "args": [
                "myexe",
                "${workspaceRoot}/bin"
            ],
            "options":{
                "cwd": "${config:mypath}"
            },
            "dependsOn": ["backup"]    // 此task依赖于label为backup的task,需要先执行label为backup的task后,才能执行此task。
        }
    ],
    "version": "2.0.0"    // 这个大概是tasks.json的版本,VSCode应该会依据这个版本来判断该json文件其余key:value的写法和正确性。
}

settings.json

在tasks.json的配置中我们提到了settings.json,这个文件能设置哪些东西我没有了解太多。我这里只写我知道的。

{
    "files.associations": {    //这个配置可以指定某些include的库按照哪种语言去解析该文件。特别是一些没有后缀名或后缀名不正常的文件,比如"*.extension":"html"就是用html去解析所有后缀为.extension的文件。
        "atomic": "cpp",    
        "ostream": "cpp"
    },
    "mypath":"/home/username/xxx/yyy"    //通过这种设置就可以在其他本文讲到的json文件中通过${config:mypath}来获得mypath的值了。
}

c_cpp_properties.json

这个json是C或C++语言按需配置的文件。可以告诉VSCode查找include文件的路径,C文件和CPP文件的解析标准等。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"    // **表示递归搜索该文件夹下所有文件
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",    // 告诉系统编译器地址
            "cStandard": "c89",                // 告诉系统对C文件使用的C标准
            "cppStandard": "c++98",           // 告诉系统对CPP文件使用的C++标准
            "intelliSenseMode": "linux-gcc-x64"    // 不是太清楚,大概是告诉系统智能识别的模式。
        }
    ],
    "version": 4
}

系统内置的变量

这部分内容参考下方链接:

Visual Studio Code Variables Reference (VSCode官网解释)

vs code中的类似${workspaceFolder}的变量的解释_Hello_Ray的博客-CSDN博客

在VSCode打开路径/home/username/Documents/redis的redis项目

调用变量方式 释义 实际路径
${workspaceRoot} 官网已经没有该变量了,已经是过去时了。虽然实际也能用,但建议使用${workspaceFolder}。虽然我上面也用了,但是我实际工程中会改掉。
${workspaceFolder} 工作区路径(我估计本质应该是.vscode的上级目录) /home/username/Documents/redis
${workspaceFolderBasename} 工作区路径的最下级文件夹名 redis
${file} 当前打开的文件的绝对路径

(假设当前打开的是tasks.json)

/home/username/Documents/redis/.vscode/tasks.json

${relativeFile} 当前打开文件相对于workspaceFolder的相对路径

(假设当前打开的是tasks.json)

.vscode/tasks.json

${fileDirname} 当前打开文件的上级文件夹的绝对路径

(假设当前打开的是tasks.json)

/home/username/Documents/redis/.vscode

${relativeFileDirname} 当前打开文件的上级文件夹相对于workspaceFolder的相对路径

(假设当前打开的是tasks.json)

.vscode

${fileWorkspaceFolder} 当前打开文件的工作空间文件夹。(有可能打开的文件不在当前工作空间,所以与workspaceFolder是有区别的)

(假设当前打开的是tasks.json)

/home/username/Documents/redis

${fileBasename} 当前打开文件的文件名

(假设当前打开的是tasks.json)

tasks.json

${fileBasenameNoExtension} 当前打开的文件的没有扩展名的文件名

(假设当前打开的是tasks.json)

tasks

${fileExtname} 当前打开文件的扩展名

(假设当前打开的是tasks.json)

json

${cwd} 任务运行器启动时的当前工作目录
${lineNumber} 活动文件中当前选定的行号
${selectedText} 活动文件中当前选定的文本
${execPath} 运行VSCode可执行文件的路径
${defaultBuildTask} 默认构建任务的名称
${pathSeparator} 作系统用来分隔文件路径中的组件的字符 / on macOS or linux,\ on Windows

如何知道一个变量在运行中的实际值?
创建一个VSCode任务,将变量值输出到控制台。 例如,要查看${workspaceFolder}的解析值,你可以在tasks.json中创建并运行(Terminal > run Task)以下简单的echo任务:

{
    "tasks": [
        {
            "label": "shell",
            "type": "shell",
            "command":"echo '<test>' ${workspaceFolder}"
        }
    ],
    "version": "2.0.0"
}


附言

以上这些文件和用法,我不是很清楚是VSCode还是C/C++插件中的C/C++ intelliSence提供的配置。不过反正用VSCode写C/C++的应该都会装C/C++这个插件。

C/C++插件包括了C/C++ intelliSence, C/C++ debugging等插件功能,无需多安装这些包含的插件。

(PS:多说一句,VSCode现在已经自带了彩色括号配对功能了哦)

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

VSCode在linux服务器下launch.json和tasks.json等文件配置 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • c# 远程关机 重启 注销 小练习

    亲测小练习 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
  • 我的HTC G16 CHACHA A810e版手机如何解锁和一键root的

    之前用了很多方法 都无法将该手机进行解锁 unlock 后来 应用刷机精灵就解决了 里面对HTC的解锁进行了集成处理 无需登录HTC官网 使用该软件 刷了原厂系统 且把预装软件进行了卸载 非常方便 我的手机配置如下 刷机精灵为
  • 3D Web轻量化引擎HOOPS:轻松解决OSGB模型复杂性与性能挑战!

    在当今的数字时代 三维模型的创建和展示对于众多行业都至关重要 无论是用于游戏开发 虚拟现实体验 建筑设计还是工程仿真 高质量的3D模型都能够提供更真实的视觉效果和更精确的数据表示 然而 随着模型的复杂性增加 其数据量也迅速膨胀 这可能会导致
  • Kafka的生成者、消费者、broker的基本概念

    kafka是一款基于发布与订阅的消息系统 它一般被称为 分布式提交日志 或者 分布式流平台 文件系统或者数据库提交日志用来提供所有事物的持久化记录 通过重建这些日志可以重建系统的状态 同样地 kafka的数据是按照一定顺序持久化保存的 可以
  • sql总结喔

    一 数据库基础 如何开服务 2个 TCP IP协议 SQL Server MSSQLSERVER 系统数据库 master 核心 模板 model 模型 msdb 警告日志 tempdb 临时 数据库文件分为数据文件 mdf ndf 和日志
  • SPI通信原理和协议

    1 SPI原理超详细讲解 值得一看 https blog csdn net as480133937 article details 105764119 2 STM32 HAL库 STM32CubeMX教程十四 SPI https blog
  • 2021-11-11密码学

    对称密码体系中发送者和接收者使用同一个密钥加密和解密 对称 可逆 非对称密码体系中发送者使用接收者的公钥进行加密 接收者使用自己的私钥进行解密 非对称 五种对称加密算法总结 1 DES 已破解 不再安全 基本没有企业在用了 是对称加密算法的
  • idea 配置文件乱码修改

    Settings gt Editor gt File Encodings 设置统一编码
  • As 启动项目出现unsupported modules detected

    首先是出现如下情况 unsupported modules detected Compilation is not supported for following modules app Unfortunately you can t ha
  • python yield关键字全面解析

    你是否曾因处理的数据集过大而内存溢出 你是否曾因为处理各种复杂的函数状态而烦恼 It does help 本文聚焦yield generator 帮助你解锁python进阶技法 写出更优雅的程序 先导概念 为了更好的理解本篇推文的内容 读者
  • 计算机网络笔记七(数据链路层:帧、MTU、ARP协议)

    1 数据链路层 1 1主要功能 用于两个设备 同一种数据链路节点 之间进行信息传递 网络层和数据链路层对比 网络层是进行地址管理和路由选择的 它是为数据报的转发找出一条路来 而数据链路层解决的是两个结点直接的数据交换 接近于物理层的概念 1
  • 线性代数学习笔记——矩阵(二)(针对期末与考研)

    伴随矩阵 设 A a i j A a ij
  • wazuh初探系列一 : wazuh环境配置

    目录 方法一 一体化部署 安装先决条件 第一步 安装所有必需的软件包 第二步 安装Elasticsearch 1 添加 Elastic Stack 存储库 安装 GPG 密钥 添加存储库 更新源 2 Elasticsearch安装和配置 安
  • 建表时出现10654错误the right syntax to use near‘NUL COMMENT‘

    创建表时 出现 10654 You have an err in your SQl sytaxy check the manual that corresponds to your MySQL sever version for the r
  • 从零开始搭建创业公司后台技术栈

    转自 http ju outofmemory cn entry 351897 编辑 公众号程序员面试 前言 说到后台技术栈 脑海中是不是浮现的是这样一幅图 图 1 有点眼晕 以下只是我们会用到的一些语言的合集 而且只是语言层面的一部分 就整
  • 服务器虚拟化方需求分析报告,服务器虚拟化解决方案报告书.doc

    WORD格式可编辑 专业知识整理分享 服务器虚拟化解决方案 Citrix XenServer服务器虚拟化解决方案 1 1 方案综述 1 1 1服务器虚拟化的业务及应用需求 随着企业业务的飞速发展 越来越多的业务系统依赖于数据中心的支撑 其中
  • 泛微移动表单校验手机号跟邮箱

    泛微移动表单校验手机号跟邮箱 var iphoneVal f phone val 获取表单字段 var checkIphone d 1 345789 d
  • h5上下滑动动画效果(vue)

    1 详情介绍 图片可以使用网络图片 根据请求过来的图片来获取高度要控制滑动的位置 可以换成视频 要实现滑动播放视频的效果 并且可以在上面添加一些其他的功能 白色背景区域可以展示对应的数据 具体效果看文章末尾 2 编码介绍 template部
  • UNIX环境高级编程 学习笔记 第十九章 伪终端

    终端登录是经由终端设备进行的 终端设备天然提供终端语义 在终端和运行程序之间有一个终端行规程 通过该规程我们能设置终端特殊字符 如退格 行删除 中断等 但当一个登录请求到达网络连接时 终端行规程并不是自动被加载到网络连接和登录shell之间
  • VSCode在linux服务器下launch.json和tasks.json等文件配置

    前言 用win下的VSCode远程连接linux服务器后 就可以用VSCode运行linux下代码了 在编译运行代码前 按照VSCode的要求 我们要给编译和执行操作分别配置一堆参数 这就是launch json和tasks json配置的