当前位置: 首页 > news >正文

【VsCode】通过tasks.json中的problemMatcher属性的fileLocation子属性设定问题的输出内容

前言

这个问题是起因在我想把代码指向的相对路径更改为使用宏的绝对路径便于编译调试,但是在一次调试过程中有一个编译时报错,点击报错内容项时,却显示找不到路径文件。报错详细内容显示是 即:代码路径+绝对路径。

"resource": "/c:/Users/97852/Desktop/ZryCode/CODE/C++/C:/Users/97852/Desktop/ZryCode/CODE/C++/Processing/IQProcess.cpp",

那么这里的错误就已经很明显了,“现在VS 认为错误的查找路径应当是相对路径,并且拼接格式是 代码路径再拼接编译时路径。”。

接下来就是解决问题需要了解的内容。我从VS的官方帮助手册和开放源码中找到了解决方法,现在整理记录下来。

tasks.json 是什么?

tasks.json是VsCode提供的一种快捷配置文件,用来集中管理 VsCode 的编译调试功能。
VS Code软件会通过 工作区 或者 打开文件夹的当前目录下(这取决于你是否为当前代码项目创建了工作区) 的.vscode 下的 tasks.json配置来为每一次调试,执行对应的相关设置内容。

问题界面是什么?

问题界面如果没有专门设置的话,就是在下方显示的编译调试辅助工具栏显示告警和错误的相关信息。
通过双击对应的问题条目,可以自动跳转到问题所在的代码文件的对应行数。

怎么设定自己的问题界面显示内容?

tasks.json中可以设置一个属性名为 problemMatcher ,这个是用来规定问题界面的全部内容的。
而它的子属性有一个名为:fileLocation的就是指的问题界面文件目录的查找方式。也就是此次问题的所在。
这里我们要将代码文件查找方式设定为自适应,并添加非绝对路径时的查找路径。

即将 属性 fileLocation 的 Value值 设定为 autodetect(自适应) "${workspaceRoot}"(这里指定非绝对路径时的查找路径 为工作区根目录)

"problemMatcher": {"owner": "cpp","fileLocation": ["autodetect","${workspaceRoot}"],"pattern": {"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$","file": 1,"line": 2,"column": 3,"severity": 4,"message": 5}
},

补充

vscode 对于 json 文件的解析方式的开源代码部分.

  • 摘录 文件目录设定部分的说明:
  /*** Defines how filename reported in a problem pattern* should be read. Valid values are:*  - "absolute": the filename is always treated absolute.*  - "relative": the filename is always treated relative to*    the current working directory. This is the default.*  - ["relative", "path value"]: the filename is always*    treated relative to the given path value.*  - "autodetect": the filename is treated relative to*    the current workspace directory, and if the file*    does not exist, it is treated as absolute.*  - ["autodetect", "path value"]: the filename is treated*    relative to the given path value, and if it does not*    exist, it is treated as absolute.*/fileLocation?: string | string[];
  • 翻译后内容:
/**。  
* 定义如何在问题模式中报告文件名。  
* 应改为。有效值包括:  
* -“absolute”:文件名始终被视为绝对名称。  
* -“relative”:文件名始终被视为相对于。  
*  当前工作目录。这是默认设置。  
* -[“相对”,“路径值”]:文件名始终为。  
*  相对于给定的路径值进行处理。  
* -“自动检测”:文件名被视为相对于。  
*  当前工作区目录,如果文件。  
*  不存在,它被视为绝对。  
* -[“自动检测”,“路径值”]:文件名被处理。  
*  相对于给定的路径值,如果不是。  
*  存在,则视为绝对。  
*/

全文附注:

The following interfaces define the basic schema of the file.tasks.json
Note: Some task options are contributed by VS Code extensions. You can use IntelliSense to find a complete list, using the Trigger Suggestions command (Ctrl+Space).tasks.json

interface TaskConfiguration extends BaseTaskConfiguration {/*** The configuration's version number*/version: '2.0.0';/*** Windows specific task configuration*/windows?: BaseTaskConfiguration;/*** macOS specific task configuration*/osx?: BaseTaskConfiguration;/*** Linux specific task configuration*/linux?: BaseTaskConfiguration;
}interface BaseTaskConfiguration {/*** The type of a custom task. Tasks of type "shell" are executed* inside a shell (e.g. bash, cmd, powershell, ...)*/type: 'shell' | 'process';/*** The command to be executed. Can be an external program or a shell* command.*/command: string;/*** Specifies whether a global command is a background task.*/isBackground?: boolean;/*** The command options used when the command is executed. Can be omitted.*/options?: CommandOptions;/*** The arguments passed to the command. Can be omitted.*/args?: string[];/*** The presentation options.*/presentation?: PresentationOptions;/*** The problem matcher to be used if a global command is executed (e.g. no tasks* are defined). A tasks.json file can either contain a global problemMatcher* property or a tasks property but not both.*/problemMatcher?: string | ProblemMatcher | (string | ProblemMatcher)[];/*** The configuration of the available tasks. A tasks.json file can either* contain a global problemMatcher property or a tasks property but not both.*/tasks?: TaskDescription[];
}/*** Options to be passed to the external program or shell*/
export interface CommandOptions {/*** The current working directory of the executed program or shell.* If omitted the current workspace's root is used.*/cwd?: string;/*** The environment of the executed program or shell. If omitted* the parent process' environment is used.*/env?: { [key: string]: string };/*** Configuration of the shell when task type is `shell`*/shell: {/*** The shell to use.*/executable: string;/*** The arguments to be passed to the shell executable to run in command mode* (e.g ['-c'] for bash or ['/S', '/C'] for cmd.exe).*/args?: string[];};
}/*** The description of a task.*/
interface TaskDescription {/*** The task's name*/label: string;/*** The type of a custom task. Tasks of type "shell" are executed* inside a shell (e.g. bash, cmd, powershell, ...)*/type: 'shell' | 'process';/*** The command to execute. If the type is "shell" it should be the full* command line including any additional arguments passed to the command.*/command: string;/*** Whether the executed command is kept alive and runs in the background.*/isBackground?: boolean;/*** Additional arguments passed to the command. Should be used if type* is "process".*/args?: string[];/*** Defines the group to which this task belongs. Also supports to mark* a task as the default task in a group.*/group?: 'build' | 'test' | { kind: 'build' | 'test'; isDefault: boolean };/*** The presentation options.*/presentation?: PresentationOptions;/*** The problem matcher(s) to use to capture problems in the tasks* output.*/problemMatcher?: string | ProblemMatcher | (string | ProblemMatcher)[];/*** Defines when and how a task is run.*/runOptions?: RunOptions;
}interface PresentationOptions {/*** Controls whether the task output is reveal in the user interface.* Defaults to `always`.*/reveal?: 'never' | 'silent' | 'always';/*** Controls whether the command associated with the task is echoed* in the user interface. Defaults to `true`.*/echo?: boolean;/*** Controls whether the panel showing the task output is taking focus.* Defaults to `false`.*/focus?: boolean;/*** Controls if the task panel is used for this task only (dedicated),* shared between tasks (shared) or if a new panel is created on* every task execution (new). Defaults to `shared`.*/panel?: 'shared' | 'dedicated' | 'new';/*** Controls whether to show the `Terminal will be reused by tasks,* press any key to close it` message.*/showReuseMessage?: boolean;/*** Controls whether the terminal is cleared before this task is run.* Defaults to `false`.*/clear?: boolean;/*** Controls whether the task is executed in a specific terminal* group using split panes. Tasks in the same group (specified by a string value)* will use split terminals to present instead of a new terminal panel.*/group?: string;
}/*** A description of a problem matcher that detects problems* in build output.*/
interface ProblemMatcher {/*** The name of a base problem matcher to use. If specified the* base problem matcher will be used as a template and properties* specified here will replace properties of the base problem* matcher*/base?: string;/*** The owner of the produced VS Code problem. This is typically* the identifier of a VS Code language service if the problems are* to be merged with the one produced by the language service* or 'external'. Defaults to 'external' if omitted.*/owner?: string;/*** The severity of the VS Code problem produced by this problem matcher.** Valid values are:*   "error": to produce errors.*   "warning": to produce warnings.*   "info": to produce infos.** The value is used if a pattern doesn't specify a severity match group.* Defaults to "error" if omitted.*/severity?: string;/*** Defines how filename reported in a problem pattern* should be read. Valid values are:*  - "absolute": the filename is always treated absolute.*  - "relative": the filename is always treated relative to*    the current working directory. This is the default.*  - ["relative", "path value"]: the filename is always*    treated relative to the given path value.*  - "autodetect": the filename is treated relative to*    the current workspace directory, and if the file*    does not exist, it is treated as absolute.*  - ["autodetect", "path value"]: the filename is treated*    relative to the given path value, and if it does not*    exist, it is treated as absolute.*/fileLocation?: string | string[];/*** The name of a predefined problem pattern, the inline definition* of a problem pattern or an array of problem patterns to match* problems spread over multiple lines.*/pattern?: string | ProblemPattern | ProblemPattern[];/*** Additional information used to detect when a background task (like a watching task in Gulp)* is active.*/background?: BackgroundMatcher;
}/*** A description to track the start and end of a background task.*/
interface BackgroundMatcher {/*** If set to true the watcher is in active mode when the task* starts. This is equals of issuing a line that matches the* beginPattern.*/activeOnStart?: boolean;/*** If matched in the output the start of a background task is signaled.*/beginsPattern?: string;/*** If matched in the output the end of a background task is signaled.*/endsPattern?: string;
}interface ProblemPattern {/*** The regular expression to find a problem in the console output of an* executed task.*/regexp: string;/*** Whether the pattern matches a problem for the whole file or for a location* inside a file.** Defaults to "location".*/kind?: 'file' | 'location';/*** The match group index of the filename.*/file: number;/*** The match group index of the problem's location. Valid location* patterns are: (line), (line,column) and (startLine,startColumn,endLine,endColumn).* If omitted the line and column properties are used.*/location?: number;/*** The match group index of the problem's line in the source file.* Can only be omitted if location is specified.*/line?: number;/*** The match group index of the problem's column in the source file.*/column?: number;/*** The match group index of the problem's end line in the source file.** Defaults to undefined. No end line is captured.*/endLine?: number;/*** The match group index of the problem's end column in the source file.** Defaults to undefined. No end column is captured.*/endColumn?: number;/*** The match group index of the problem's severity.** Defaults to undefined. In this case the problem matcher's severity* is used.*/severity?: number;/*** The match group index of the problem's code.** Defaults to undefined. No code is captured.*/code?: number;/*** The match group index of the message. Defaults to 0.*/message: number;/*** Specifies if the last pattern in a multi line problem matcher should* loop as long as it does match a line consequently. Only valid on the* last problem pattern in a multi line problem matcher.*/loop?: boolean;
}/*** A description to when and how run a task.*/
interface RunOptions {/*** Controls how variables are evaluated when a task is executed through* the Rerun Last Task command.* The default is `true`, meaning that variables will be re-evaluated when* a task is rerun. When set to `false`, the resolved variable values from* the previous run of the task will be used.*/reevaluateOnRerun?: boolean;/*** Specifies when a task is run.** Valid values are:*   "default": The task will only be run when executed through the Run Task command.*   "folderOpen": The task will be run when the containing folder is opened.*/runOn?: string;
}

扩展阅读:

Visual Studio Code Tasks 附录
Visual Studio 代码变量参考

相关文章:

  • 【笔记】软件架构师要点记录(1)
  • LeetCode-102. 二叉树的层序遍历【树 广度优先搜索 二叉树】
  • java.util.Arrays 详解
  • 【八股系列】webpack的构建流程是什么?
  • 如何用电脑批量操作多部手机
  • 二.常见算法--贪心算法
  • 基金基础知识-基金的生命周期
  • 蒙特卡洛+概率潮流!基于蒙特卡洛和新能源出力模拟的概率潮流分布程序代码!
  • AI赋能 企业智能化应用实践
  • Django数据库查询操作
  • C# 观察者模式实现
  • 【Linux】深入理解 Linux 的 chmod 指令
  • 音视频-常用的分析工具介绍-连续补充
  • 基于Django的美团药品数据分析与可视化系统,有多用户功能,可增删改查数据
  • 产品经理交接规范及流程
  • php的引用
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Android开源项目规范总结
  • Apache的基本使用
  • leetcode386. Lexicographical Numbers
  • 第十八天-企业应用架构模式-基本模式
  • 对超线程几个不同角度的解释
  • 蓝海存储开关机注意事项总结
  • 批量截取pdf文件
  • 双管齐下,VMware的容器新战略
  • 一个JAVA程序员成长之路分享
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 运行时添加log4j2的appender
  • nb
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (11)MATLAB PCA+SVM 人脸识别
  • (23)Linux的软硬连接
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (多级缓存)多级缓存
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (万字长文)Spring的核心知识尽揽其中
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ***检测工具之RKHunter AIDE
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net Signalr 使用笔记
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 验证控件和javaScript的冲突问题
  • .NET简谈设计模式之(单件模式)