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等文件配置 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 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配置的