【转】VScode tasks.json和launch.json的设置

转自:VScode tasks.json和launch.json的设置 - 知乎

目录

  1. C++(方法1:不使用VSCode插件,较繁琐)
  2. C++(方法2:使用Native Debug插件)
  3. C++(方法3:使用C/C++ Compile Run插件)
  4. Rust(使用Native Debug插件)
  5. Typescript(仅做参考,这是用来写vscode插件时的项目设置)
  6. 一些常用的预定义变量

在网上搜了几篇文章,都写的不是很详细,而且好多都过时了。尤其很多是task0.1.0的版本,vscode自动会屏蔽掉。

根据我的理解,tasks用于在launch前执行任务,launch用于读取执行文件。

这两者经常组合起来用于需要编译语言的自动编译+自动执行,下面以C++、Rust和Typescript为例。

一、 C++(方法1:不使用VSCode插件,较繁琐)

在当前文件是C++的情况下,tasks可以被用来做编译,而launch用来执行编译好的文件。

// tasks.json
{// https://code.visualstudio.com/docs/editor/tasks"version": "2.0.0","tasks": [{"label": "Build",  // 任务的名字叫Build,注意是大小写区分的,等会在launch中调用这个名字"type": "shell",  // 任务执行的是shell命令,也可以是"command": "g++", // 命令是g++"args": ["'-Wall'","'-std=c++17'",  //使用c++17标准编译"'${file}'", //当前文件名"-o", //对象名,不进行编译优化"'${fileBasenameNoExtension}.exe'",  //当前文件名(去掉扩展名)],// 所以以上部分,就是在shell中执行(假设文件名为filename.cpp)// g++ filename.cpp -o filename.exe"group": { "kind": "build","isDefault": true   // 任务分组,因为是tasks而不是task,意味着可以连着执行很多任务// 在build组的任务们,可以通过在Command Palette(F1) 输入run build task来运行// 当然,如果任务分组是test,你就可以用run test task来运行 },"problemMatcher": ["$gcc" // 使用gcc捕获错误],}]
}

下面是launch.json文件
里面主要是编译器的参数,可以使用ctrl+space来查看有哪些可用参数
也可以在configurations中存在鼠标光标的情况下,点击右下自动出现的Add Configurations按钮
为什么选gdb不选 windows?因为这个不会执行预任务,也就没法编译文件了
为什么选 launch不选attach,是因为attach用来给正在执行的文件用的,比如网页中的组件,而launch是执行新文件

// launch.json{"version": "0.2.0","configurations": [{"name": "(gdb) Launch", //这个应该是F1中出现的名字"preLaunchTask": "Build",  //在launch之前运行的任务名,这个名字一定要跟tasks.json中的任务名字大小写一致"type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe", //需要运行的是当前打开文件的目录中,名字和当前文件相同,但扩展名为exe的程序"args": [],"stopAtEntry": false, // 选为true则会在打开控制台后停滞,暂时不执行程序"cwd": "${workspaceFolder}", // 当前工作路径:当前文件所在的工作空间"environment": [],"externalConsole": true,  // 是否使用外部控制台,选false的话,我的vscode会出现错误"MIMode": "gdb","miDebuggerPath": "c:/MinGW/bin/gdb.exe","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

二、C++(方法2:使用Native Debug插件)

VSCode里有一个Native Debug插件能大大简化上述配置,请点击下载。

点击下载Native Debug​marketplace.visualstudio.com/items?itemName=webfreak.debug正在上传…重新上传取消​

下载安装之后,我们再来试试。

使用Native Debug插件自动生成

三、C++(方法3:使用C/C++ Compile Run插件)

VSCode的这个插件更简单,但只能用于单文件。

C/C++ Compile Run​marketplace.visualstudio.com/items?itemName=danielpinto8zz6.c-cpp-compile-run正在上传…重新上传取消​

这下根本无需配置task.json和launch.json,保存后直接按F6自动编译运行,其他功能见插件下载页的how to use。

Native Debug插件和C/C++ Compile Run插件的对比:
前者更通用(可用于多种编译语言),后者更简单。

四、Rust(使用Native Debug插件)

适用于cargo new建立的项目。

具体操作

//tasks.json
{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "Build","type": "shell","command": "cargo build"}]
}

// 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": "Debug","type": "gdb",  // 使用Native Debug插件提供的gdb类型"request": "launch","target": "./target/debug/${workspaceFolderBasename}.exe", // 注意这里使用了第五部分讲到的配置变量"preLaunchTask": "Build","cwd": "${workspaceRoot}","valuesFormatting": "parseText"}]
}

五、Typescript(仅做参考,这是用来写vscode插件时的项目设置)

tasks.json

// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
{"version": "2.0.0","tasks": [{"type": "npm","script": "watch","problemMatcher": "$tsc-watch","isBackground": true,"presentation": {"reveal": "never"},"group": {"kind": "build","isDefault": true}}]
}

launch.json

{"version": "0.2.0","configurations": [{"name": "Run Extension","type": "extensionHost","request": "launch","runtimeExecutable": "${execPath}","args": ["--extensionDevelopmentPath=${workspaceFolder}"],"outFiles": ["${workspaceFolder}/out/**/*.js"],"preLaunchTask": "${defaultBuildTask}"},{"name": "Extension Tests","type": "extensionHost","request": "launch","runtimeExecutable": "${execPath}","args": ["--extensionDevelopmentPath=${workspaceFolder}","--extensionTestsPath=${workspaceFolder}/out/test/suite/index"],"outFiles": ["${workspaceFolder}/out/test/**/*.js"],"preLaunchTask": "${defaultBuildTask}"}]
}

六、一些常用的预定义变量

Visual Studio Code Variables Reference​code.visualstudio.com/docs/editor/variables-reference#_predefined-variables正在上传…重新上传取消​

预定义变量#

支持下面的预定义变量:

  • ${workspaceFolder} - 当前工作目录(根目录)
  • ${workspaceFolderBasename} - 当前文件的父目录
  • ${file} - 当前打开的文件名(完整路径)
  • ${relativeFile} - 当前根目录到当前打开文件的相对路径(包括文件名)
  • ${relativeFileDirname} - 当前根目录到当前打开文件的相对路径(不包括文件名)
  • ${fileBasename} - 当前打开的文件名(包括扩展名)
  • ${fileBasenameNoExtension} - 当前打开的文件名(不包括扩展名)
  • ${fileDirname} - 当前打开文件的目录
  • ${fileExtname} - 当前打开文件的扩展名
  • ${cwd} - 启动时task工作的目录
  • ${lineNumber} - 当前激活文件所选行
  • ${selectedText} - 当前激活文件中所选择的文本
  • ${execPath} - vscode执行文件所在的目录
  • ${defaultBuildTask} - 默认编译任务(build task)的名字

预定义变量示例:

假设你满足以下的条件

  1. 一个文件 /home/your-username/your-project/folder/file.ext 在你的编辑器中打开;
  2. 一个目录 /home/your-username/your-project 作为你的根目录.

下面的预定义变量则代表:

  • ${workspaceFolder} - /home/your-username/your-project
  • ${workspaceFolderBasename} - your-project
  • ${file} - /home/your-username/your-project/folder/file.ext
  • ${relativeFile} - folder/file.ext
  • ${relativeFileDirname} - folder
  • ${fileBasename} - file.ext
  • ${fileBasenameNoExtension} - file
  • ${fileDirname} - /home/your-username/your-project/folder
  • ${fileExtname} - .ext
  • ${lineNumber} - 光标所在行
  • ${selectedText} - 编辑器中所选择的文本
  • ${execPath} - Code.exe的位置
Tip: vscode的智能提示会在tasks.jsonlaunch.json 提示所有支持的预定义变量.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小处见大问题

如果有以下几种很简单的需求,可是小需要中隐藏着大问题。 给页面添加4个web按钮,点击4个按钮分别实现 (1)打开一个摸态对话框 (2)页面在客户端转向 (3)页面转向并且进行一个服务器端…

巧手定制Windows CE系统

嵌入式系统正在日益广泛的应用于各个方面,嵌入式系统的最大特点在于其精简和实时性。公司近期委派我负责一个新的嵌入式系统项目,因为是小型设备,所以我面临的第一个难题是需要找一个体积少,但非常灵活添加外围接口的嵌入式系统。…

【转】vscode配置C/C++环境

转自:vscode配置C/C环境 - 知乎 VS Code配置作者:谭九鼎 链接:Visual Studio Code 如何编写运行 C、C 程序? - 知乎 有改动。个人按照步骤后,做到复制上三个json那一步,就可以运行了。 我将settings.json…

Boot Loader的启动流程和开发经验总结

Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL…

c# 相对路径的一些文献

1.获取和设置当前目录的完全限定路径。string str System.Environment.CurrentDirectory;Result: C:\xxx\xxx2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。string str System. Windows .Forms.Application.StartupPath;Result: C:\xxx\xxx3.获…

【转】dicom网络通讯入门(1)

转自:dicom网络通讯入门(1) - assassinx - 博客园 如果只看标准就会越看越糊涂,根本原因就是因为dicom抽象得太严重,是“专家”弄的。没办法。 那么到底服务类是什么?sop 又是什么?&#xff0…

三种嵌入式操作系统的分析与比析

1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性&#…

用WebORB实现flex + .net后台的Remoting

实现flex与后台通信最简单的方式是采用httpServic的方式,或webservice。但这两种方式都是基于文本的传输,传输效率低,采用RemoteObject的方式,传输的内容采用AMF3格式的二进制编码,效率较高,并且能实现远程…

【转】dicom网络通讯入门(2)

转自:dicom网络通讯入门(2) - assassinx - 博客园 首先我们现一个echo响应测试工具,也就是echo 的scu,不是实现打印作业管理么。同学我告诉你还早着呢。本来标题取的就是《dicomviewer 第二弹 之 实现打印管理》名字多…

基于WINCE6.0下载multiple XIP镜像文件

备注:基于usb下载的方式,MLC nand flash为K9G8G08U 1. Multiple XIP模式的文件说明 Multiple XIP模式下生成的文件有chain.bin、chain.lst、NK.bin、xip.bin和xipkernel.bin,如下图所示: 图1 2. Eboot下载Multiple XI…

Final Michael Scofield

转载于:https://www.cnblogs.com/andrewx/archive/2009/08/16/1547738.html

【转】dicom网络通讯入门(3)

转自: dicom网络通讯入门(3) - assassinx - 博客园 接下来可以进行消息传递了 ,也就是dimse ,再来复习下 什么是dimse 。n-set n-create c-echo 这些都是dimse 他们都是属于一种结构的pdu 那就是tf-pdu(传…

从零开始学习jQuery (三) 管理jQuery包装集【转】

一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着学习如何管理jQuery包装集, 比如添加,删除,切片等. 二.前言 本系列的2,3篇上面列举了太多的API相信大家看着眼晕. 不过这些基础还必须要讲, 基础要扎实.其实对于…

【转】ubuntu 下 VNCview 远程桌面无法传输文件问题

转自:ubuntu18.04VNCview文件传输问题_gsls200808的专栏-CSDN博客_vnc传输文件按钮不可用 很多文章说VNCview不能传输文件,实际上这是一个误区。 以ubuntu为例,默认使用 sudo apt-get vnc4server 这个命令安装上的vncserver实际是tigerVNC…

在何时该用什么方式编译WinCE

这是一篇很好的文章,很多开发者其实并没有搞清楚这个问题:在何时该用什么方式编译WinCE 导致走了很多弯路,也包括我自己 感谢作者写了这篇文章 这么好的文章,我想应该翻译过来给大家 在何时该用什么方式编译WinCE 在新闻组里&…

public protect private继承

引自原来在CGD讨论的几点总结:1. public继承被称为类型继承(type inheritance)。往往反映is-a关系。2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但不能在层次结构…

【转】Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)

转自:Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题) - Hongkai_Ding - 博客园 0. 前言 这里直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA,没有单独安装更高版本的 NVIDIA 驱动;此安装是在 Intel 集显下的图形…

一面微创题--字符串逆序输出

最近一直在等面试消息,都有点着急了,的确,还有太多不足,笔面之后的一面技术面,幸运地是在三个面试者中面试官留下了我,可是一句话又搞的我一点底都没了:“你别以为你通过了就怎么着,…

返回北京

6点15做311新街口转800到光明桥转800到医院7:40挂上号9:30叫到号,护士站调病例分诊大屏幕显示叫号,可到挂号处缴费。到一层影象预约中心预约,相同检查可合并。胸片预约可当时等候检查。一层牌号抽血。乘434方庄环岛南下,王沛肿瘤科…

C++中的强制转换

标准c中主要有四种强制转换类型运算符&#xff1a; const_cast&#xff0c;reinterpret_cast&#xff0c;static_cast&#xff0c;dynamic_cast等等。 1&#xff09;static_cast<T*>&#xff08;a&#xff09; 将地址a转换成类型T&#xff0c;T和a必须是指针、引用、算术…