VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、简介

在 VS Code 中,tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题(错误、警告等)。

problemMatcher有三种配置方式,具体可参考《VSCode中的任务什么情况下需要配置多个问题匹配器problemMatcher?多个问题匹配器之间的关系是什么?》的介绍。

本文要介绍的是problemMatcher为一个ProblemMatcher的JSON对象时其下的子对象pattern,pattern用于匹配任务执行时输出的信息,如编译任务输出的告警和错误信息,对符合pattern指定匹配规则的信息则纳入problemMatcher处理。

二、测试的C++代码文件样例

为了测试vscode的问题匹配,下面是一个故意存在多处错误的hello.cpp文件的代码,注意就是一个完整的cpp文件,不存在单独的头文件和其他外部文件:

#include <stdio.h>
#include <stdlib.h>
#include "myhead.h"int main()
{int loop;int i,j;printf("j=%s\n",j);for(loop=0;loop<5;loop++)printf("hello,world!%d\n",i);i++;hell("");    }

大家看得出来几处问题代码吗?

三、问题匹配器中的模式pattern介绍

3.1、vscode中pattern的定义

pattern在vscode中 的定义如下:

pattern: string | ProblemPattern | ProblemPattern[]

关于这个定义,官方文档中有如下说明: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可以为字符串、ProblemPattern类型对象和ProblemPattern数组:

  1. pattern为字符串的情况,vscode官方说是预定义的匹配模式,老猿查阅了很多资料,也许是统信下的vscode版本1.81.0太低,也许是没找对方法,在vscode1.81.0中反复测试也没有测试通过;
  2. pattern 为 ProblemPattern类型的对象时,包含有多个子对象,在接下来的3.2节中详细介绍其相关信息;
  3. pattern 为 ProblemPattern类型的数组时,表明其所在的问题匹配器的匹配模式可以有多种,这些匹配模式按照配置中的先后顺序逐一与输出信息匹配,如果都匹配成功,则整个问题匹配成功,否则就是未匹配,即多个匹配模式是与的关系,这个与问题匹配器problemMatcher多个之间是或的关系是不同的。查阅了vscode的官方文档,这种模式数组是用于匹配多行。不过关于此模式老猿一直未能测试成功,3.3节再介绍测试情况。

3.2、ProblemPattern类型介绍

3.2.1、ProblemPattern类的定义

以下是vscode官方文档中关于ProblemPattern类的定义:

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 proper从上面官方文档的介绍可以知道,ProblemPattern包含多个子元素,下面分每个子元素展开介绍。从以上定义的英文注释能理解大部分定义要素的含义,但有些光理解注释的字面意思还不够,老猿结合测试情况对这些ties 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;
}
3.2.2 ProblemPattern类型的介绍

从上面官方文档的介绍可以知道,ProblemPattern包含多个子元素,从以上定义的英文注释能理解大部分定义要素的含义,但有些光理解注释的字面意思还不够,老猿结合测试情况对这下面分每个子元素展开介绍。

3.2.2.1、 regexp

regexp对应为匹配输出问题信息的正则表达式,正则表达式使用的元字符与Python的re模块基本一致,如元字符包括:“.*?[]{}[]\+-^$”等,转义符为"\",同时支持转义符定义的特殊序列以及组匹配模式,支持通过组序号方式来访问匹配内容,需要注意转义符在字符串中需要使用双斜杠。

案例:"^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$"
这个正则语句匹配如下类似的错误信息:hello.cpp:3:10: error: myhead.h: 没有那个文件或目录

3.2.2.2、kind

指问题匹配时匹配到问题具体的行列位置还是只需要匹配到文件,有2个取值,一个是“file”,表示只需要匹配到文件,另一个是“location”,匹配到行列指定的具体位置,缺省值是“location”。

我们通过案例来看看问题面板输出的不同,以上面hello.cpp的爆粗信息:hello.cpp:3:10: fatal error: myhead.h: 没有那个文件或目录为例:

  1. 设置为“location”,问题面板中输出信息文件那栏输出了文件名、行号、列号,如图:
    在这里插入图片描述
    注意,零两个问题不是问题匹配器problem_1输出的,而是扩展组件C++智能感知输出的。
  2. 设置为“file”,问题面板中输出信息文件那栏输出了文件名、行号、列号,不过行号、列号固定为1,如图:
    在这里插入图片描述
3.2.2.3、file、line、column

在正则表达式匹配输出信息时识别出来的文件名的匹配组号,有关正则知识请参考老猿在CSDN上《Python基础教程》下的博文《第11.16节 Python正则元字符“()”(小括号)与组(group)匹配模式》的相关介绍。

按照:
案例正则表达式:"^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$"
对错误信息:hello.cpp:3:10: error: myhead.h: 没有那个文件或目录

进行匹配,file的匹配组号为1,即第一个括号内匹配到的内容为文件名,类似的line、column为匹配到错误位置行号、列号的匹配组号,在上面例子中分别对应组号2和3。

3.2.2.4、endLine、endColumn

endLine、endColumn与line、column类似,不过有些代码的编译构建程序会输出错误代码的起止行号和列号,line、column匹配开始行号和列号,而endLine、endColumn匹配终止行号和列号。C++的编译器没有输出相关信息,因此无需配置。

3.2.2.5、severity

问题输出信息中匹配到的问题级别的匹配组号,在上面的例子中就是(error)这个匹配信息对应的匹配组号。problemMatcher和ProblemPattern都存在“severity”的属性,ProblemPattern又是problemMatcher的子属性,二者的“severity”属性关系请见《VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系》的分析,相关情况请参考本文后面的测试情况说明。

3.2.2.6、code

用于设置正则表达式匹配问题报错信息中给出的错误源代码的匹配组号,在C++中的报错信息中存在有源代码信息,但是在报错信息后面单独一行输出,由于涉及多行匹配,老猿一直无法验证成功

没测试成功的原因可能有3个:

  1. vscode的版本过低,因为老猿使用的是国产操作系统,安装的vscode的版本是1.81.0,而windows下已经至少是1.20.0的版本了;
  2. 多行问题匹配器不适合C++的编译错误信息,可能在别的语言构建时可以;
  3. 老猿的配置方法不对。

老猿觉得前面两个原因的可能性占多数,因为老猿做了很多测试都无法支持多行输出信息的处理,详细请见博文下面的介绍。

3.2.2.7、message

用于设置正则表达式匹配问题报错信息中给出的具体错误信息的匹配组号,如果没有配置或配置为0,默认就是包含文件名等在内的整个问题信息。

3.2.2.8、loop

loop这个属性老猿仅从字面理解了,是指定多行问题匹配器中的最后一个模式是否应循环,只要它与一行匹配即可,仅对多行问题匹配器中的最后一个问题模式有效。老猿理解为多行问题信息匹配需要多个匹配器来匹配多行的信息,如果loop为true,则只要这个问题匹配器匹配到任意一行的输出信息即可。

因为涉及多行匹配,与code属性一样,用C++程序测试时没有测试通过,因此也不知道理解是否正确。

四、问题匹配器的一些测试案例及结果介绍

4.1、编译hello.cpp的tasks.json的基本配置

下面是老猿使用的编译hello.cpp的tasks.json的基本配置:

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++ 生成活动文件","command": "/usr/bin/g++","args": ["-fdiagnostics-color=always","-g","-Wall","-Wextra","-O0","${workspaceFolder}/hello.cpp","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": [              "$gcc"],"group": {"kind": "build","isDefault": true},"detail": "编译器: /usr/bin/g++"}]
}

这是初始配置,问题匹配器用的是预定义的$gcc。用该配置编译上述hello.cpp时,在终端窗口输出的错误信息如下:
在这里插入图片描述
目前看到仅一个报错:“/home/administrator/E_DRIVER/vcwork/test/hello.cpp:3:10: fatal error: myhead.h: 没有那个文件或目录”,这是因为遇到了致命错误,所以没有继续往下执行编译。下面是此时在问题控制面板的输出信息:
在这里插入图片描述
可以看到输出了三个error级别的错误信息,其中前2个是VSCODE的C++插件IntelliSense输出的,第三个是cpptools输出的,实际上就是上面配置的问题匹配器$gcc输出的。

4.2、测试新增一个问题匹配器以及problemMatcher和ProblemPattern的severity属性关系

修改问题匹配器配置如下:

 "problemMatcher": [   {"owner": "problem_1","severity": "warning","fileLocation": "absolute","pattern":            {"regexp": "^(.*):(\\d+):(\\d+):\\s+(fatal).*:\\s+(.*)$","file": 1,"line": 2,"column": 3,"severity": 4,"message": 5}},           "$gcc"]

注意该问题匹配器的配置有如下要点:

  1. problemMatcher."severity"的值为 “warning”;
  2. pattern."severity"的值为4,对应regexp的第4个匹配组号,对应匹配内容为(fatal)
  3. 配置了2个问题匹配器,分别是自定义的problem_1和预定义的$gcc

这样配置后,执行生成构建任务后,问题面板的输出信息如下:
在这里插入图片描述
可以看到:

  1. 原来基本配置显示的最左边的严重级别图标为error,修改问题匹配器后显示为warning对应的图标;
  2. 问题来源显示为新配置的problem_1;
  3. 错误信息由原来的“myhead.h: 没有那个文件或目录”变成了“没有那个文件或目录”。
    结合上述问题匹配器大家去理解一下为什么会有这些变化,有疑问在评论区提问。

通过这个配置可以说明如下情况:

  1. problemMatcher的severity属性优先ProblemPattern的severity属性;
  2. 多个问题匹配器是按顺序匹配的,匹配到一个后面的不再匹配。

4.3、去除problemMatcher的severity配置场景

将自定义的问题匹配器的problemMatcher的severity属性配置注释掉,同时将message的匹配组号调整为4,与pattern."severity"的值相同,配置如下:

     "problemMatcher": [   {"owner": "problem_1",// "severity": "warning","fileLocation": "absolute","pattern":            {"regexp": "^(.*):(\\d+):(\\d+):\\s+(fatal).*:\\s+(.*)$","file": 1,"line": 2,"column": 3,"severity": 4,"message": 4}},           "$gcc"],

可以看到执行构建任务时,问题面板输出内容如下:
在这里插入图片描述
可以看到输出的消息变为:fatal,问题严重级别图标变为error,相关结论大家可以参考《VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系》的介绍。

4.3、新增两个定制化的problemMatcher配置场景

4.3.1、测试背景说明

由于测试代码中的#include "myhead.h"存在致命错误,导致编译程序无法往下执行,为了测试本场景,要求本次测试的代码是注释或去除了该行代码,此时编译报错信息为:

hello.cpp:10:12: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘int’ [-Wformat=]printf("j=%s\n",j);^~~~~~~~ ~
hello.cpp:14:5: error: ‘hell’ was not declared in this scopehell("");^~~~
hello.cpp:14:5: note: suggested alternative: ‘ftell’hell("");^~~~ftell生成已完成,但出现错误。*  终端进程启动失败(退出代码: -1)
4.3.2、测试的问题匹配器配置

配置了三个问题匹配器,分别是problem_error、problem_warning和预定义的gcc,三个问题匹配器本身都没有配置severity属性。具体配置如下:

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

进行编译构建后,输出问题面板内容如下:
在这里插入图片描述

可以看到输出了4个问题,其中一个是C++ InelliSense输出的,其他三个是自定义问题匹配器输出的,大家应该可以理解输出信息为什么是这样吧?特别是最后一个显示的信息为什么是‘ftell’?不理解的在评论区提问吧。

4.4、测试捕获输出了源代码的问题

将问题匹配器换成如下:

"problemMatcher": [   {"owner": "problem_code","fileLocation": "absolute","pattern":            {"regexp": "^.*(printf).*$","file":1,"message": 1             }},            "$gcc"]

该问题匹配器试图匹配输出信息存在printf的语句,但经测试该问题匹配器无法捕获到问题,具体原因未知,如果有哪位大佬可以解惑,欢迎在评论区留言,老猿感激不尽。

4.5、测试捕获多行问题信息

将问题匹配器改成如下:

"problemMatcher": [   {"owner": "problem_multiline","fileLocation": "absolute","pattern": [           {"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|note|error):\\s+(.*)$","file": 1,"line": 2,"column": 3,"severity": 4,"message": 5},{"regexp": "(.*)","file":1,"message": 1,"loop":true}]},              "$gcc"]

上面的问题匹配器数组包含了两个问题匹配器,一个自定义的problem_multiline,一个gcc,其中problem_multiline配置了两个ProblemPattern问题模式。运行编译任务后,可以看到问题面板输出信息如下:
在这里插入图片描述
这个输出结果可以看到,针对note的告警信息,匹配了problem_multiline这个问题匹配器,其他的问题输出信息都没有匹配到problem_multiline,匹配到的问题匹配器的输出信息感觉是两个ProblemPattern对note所在的首行输出信息进行匹配之后叠加一起作为message输出,为什么这样老猿也没搞懂,欢迎各位大佬指教。

五、小结

本文介绍了VSCode任务tasks.json中的问题匹配器problemMatcher的配置项问题匹配模式ProblemPattern,包括官方定义以及老猿对每个ProblemPattern子对象的解读,有些内容是老猿测试验证后独家公布,同时对相关知识老猿也存在多处没有理解的地方,在正文中都以加粗字体显示,期待各位大佬指导。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于vscode使用方面的问题的内容请参考专栏《国产信创之光》的相关文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

VSCODE的tasks.json的problemMatcher的子配置项patternMatcher可以有哪些下级子配置项,其用途分别是什么?

在VSCode的tasks.json文件中,problemMatcher是一个关键配置项,它可以确定问题面板中显示的内容。特别要注意的是,它的子属性patternMatcher可以进一步定义问题的匹配规则。

patternMatcher的属性值可以是以下几种:

“default”: {}:使用默认的匹配规则。
“strict”: {}:使用严格的匹配规则,只有完全匹配的问题才会显示。
“off”: {}:关闭问题匹配功能,不显示任何问题。
“word”: /\b(?:if|else|while|for)\b/g:针对特定的关键词进行匹配,这里的示例是针对C++中的if、else、while和for等关键字。
“regexp”: /^((?!\b(?:if|else|while|for)b).)*$/gm:使用正则表达式进行更复杂的匹配,例如检测C++代码中是否存在语法错误。
“not”: { “match”: “string”, “message”: “string” }:排除与指定字符串完全匹配的问题。
“any”: [{}, {}]:或运算,只要满足其中一个规则就可以匹配。
“all”: [{}, {}]:与运算,必须满足所有规则才能匹配。

在 VS Code 的 tasks.json 中,problemMatcher 的 patternMatcher 子配置项用于指定问题匹配器的模式匹配器。它可以是一个字符串或一个对象,用于进一步定义问题的匹配方式。

对于 patternMatcher 子配置项,可以根据不同的任务和编译器输出格式进行自定义配置。以下是一些可能的下级子配置项及其用途:

type:指定模式匹配器的类型。可以是 “regex” 或 “literal”。“regex” 表示使用正则表达式进行匹配,“literal” 表示直接匹配字符串。
pattern:指定模式匹配的模式。如果是 “regex” 类型,则 pattern 是一个正则表达式;如果是 “literal” 类型,则 pattern 是一个字符串。
file:指定要匹配的文件路径。可以是一个字符串或一个字符串数组,用于指定要匹配的文件。
line:指定要匹配的行号。可以是一个整数或一个整数数组,用于指定要匹配的行号范围。
column:指定要匹配的列号。可以是一个整数或一个整数数组,用于指定要匹配的列号范围。
message:指定要匹配的错误信息内容。可以是一个字符串或一个字符串数组,用于指定要匹配的错误信息内容。

VSCODE的tasks.json的problemMatcher的patternMatcher可以有哪些下级子配置项,其用途分别是什么?
根据引用,在tasks.json中,problemMatcher的patternMatcher可以有以下下级子配置项:

fileLocation: 指定问题界面文件目录的查找方式,可以是绝对路径或相对路径。
uri: 指定问题界面文件的URI。
severity: 指定问题的严重程度,可以是error、warning或info。
code: 指定问题的代码。
message: 指定问题的消息。
loop: 指定是否循环匹配问题。
location: 指定问题的位置。
line: 指定问题所在的行数。
column: 指定问题所在的列数。
endLine: 指定问题结束的行数。
endColumn: 指定问题结束的列数。
relatedInformation: 指定相关信息。
其中,fileLocation和uri用于指定问题界面文件的位置,severity用于指定问题的严重程度,code用于指定问题的代码,message用于指定问题的消息,location用于指定问题的位置,line和column用于指定问题所在的行数和列数,endLine和endColumn用于指定问题结束的行数和列数,relatedInformation用于指定相关信息。

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

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

相关文章

Java操作redis常见类型数据存储

目录 一、Java连接Redis 1.1 导入pom依赖 1.2 建立连接 二、Java使用Redis 2.1 字符串 String 2.2 哈希 Hash 2.3 列表 List 2.4 集合 Set 2.5 有序集合 Sorted Set 三、Redis的实际应用场景 一、Java连接Redis redis与mysq都是数据库&#xff0c;java操作redis其实跟…

2023年【施工升降机司机(建筑特殊工种)】最新解析及施工升降机司机(建筑特殊工种)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 施工升降机司机(建筑特殊工种)最新解析参考答案及施工升降机司机(建筑特殊工种)考试试题解析是安全生产模拟考试一点通题库老师及施工升降机司机(建筑特殊工种)操作证已考过的学员汇总&#xff0c;相对有效帮助施工升…

SAP 快速Debug财务替代GGB1

本文目的是提供快速debug财务替代的步骤。 1.GGB1打开财务替代界面 2.找到需要调试的替代&#xff0c;并在tcode输入框中输入SHCB,回车后将显示系统自动生成的源码界面。 3.找到需要调试的步骤&#xff0c;设置断点&#xff0c;后续进行重现操作即可进入断点位置。 以上。

风电场数字孪生-升压站BIM三维模型-obj格式

简介&#xff1a; 风电场中的升压站三维模型&#xff0c;obj格式&#xff0c;采用BIM技术建模&#xff0c;可应用于风电场三维数字孪生领域&#xff0c;用于对升压站进行漫游浏览&#xff1b;三维可视化场景应用&#xff1b;风电场三维设计模型。 下载地址 风电场数字孪生-升…

PostgreSQL中所的锁

为了确保复杂的事务可以安全地同时运行&#xff0c;PostgreSQL提供了各种级别的锁来控制对各种数据对象的并发访问&#xff0c;使得对数据库关键部分的更改序列化。事务并发运行&#xff0c;直到它们尝试获取互相冲突的锁为止(比如两个事务更新同一行时)。当多个事务同时在数据…

java springboot在测试类中构建虚拟MVC环境并发送请求

好 上文java springboot在测试类中启动一个web环境我们在测试类中搭了一个web环境 那么 下面就要想办法弄一个接口的测试 这边 我们还是要在controller包下去创建一个 controller类 写一个访问接口 这里 我创建一个 TestWeb.java 这里 我们编写代码如下 package com.example.…

7.0 异常处理

1. 异常概述 1.1. 异常的概念 Java中的异常是指Java程序在运行时可能出现的错误或非正常情况&#xff0c;比如在程序中试图打开一个根本不存在的文件&#xff0c;在程序中除0等。异常是否出现&#xff0c;通常取决于程序的输入、程序中对象的当前状态以及程序所处的运行环境。…

Week-T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强&#xff08;增加数据集中样本的多样性&#xff09;三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…

查看文件的二进制数据

有时候会遇到想查看一些文件的二进制的数据的需求&#xff0c;比如想看一张图片的二进制数据&#xff0c;想查看bin文件的二进制数据&#xff0c;或者想查看其它文件的二进制数据等等。 在linux和mac下有命令直接支持&#xff0c;比较方便&#xff0c;但是很多人用的是windows…

【Java 进阶篇】JavaScript JSON 语法入门:轻松理解数据的序列化和反序列化

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇关于 JavaScript 中 JSON&#xff08;JavaScript Object Notation&#xff09;语法的入门指南。JSON 是一种轻量级的数据交换格式&#xff0c;广泛应用于前端开发中。通过这篇博客&#xff0c;我将带你深入了解 JSON 的语法…

[userfaultfd] 2019-BalsnCTF_KrazyNote

前言 题目不算难, 但是这代码逆向可逆死个人:) 悲悲悲 程序分析 内核版本: v5.1.9 保护: 开了 kaslr, smep, smap. 现在的题目基本都开了, 都不用看. 其中 note 模块中注册了一个 misc 设备, 其函数表中就只有 note_open 和 note_unlocked_ioctl 两个函数, 其中 note_open…

C#入门(13):特性Attribute

C# 特性&#xff08;Attributes&#xff09;是用于在运行时为程序元素&#xff08;如类、方法、属性等&#xff09;添加声明性信息的一种方式。这些信息可以在程序运行时通过反射&#xff08;Reflection&#xff09;访问。特性可以用来控制程序行为、添加元数据或者影响程序的运…

SpringBoot趣探究--1.logo是如何打印出来的

一.前言 从本篇开始&#xff0c;我将对springboot框架做一个有趣的探究&#xff0c;探究一下它的流程&#xff0c;虽然源码看不懂&#xff0c;不过我们可以一点一点慢慢深挖&#xff0c;好了&#xff0c;下面我们来看一下本篇的知识&#xff0c;这个logo是如何打印出来的&#…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大特点分析

数字化时代银行网点厅堂营销存在以下5大特点&#xff1a; 1、产品多样化&#xff1a;在数字化时代&#xff0c;银行的产品和服务变得更加多样化。除了传统的存款、贷款、理财等金融服务外&#xff0c;还新增了各种创新产品&#xff0c;如网上银行、移动支付、投资咨询、保险、…

【开源】基于微信小程序的音乐平台

项目编号&#xff1a; S 055 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S055&#xff0c;文末获取源码。} 项目编号&#xff1a;S055&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…

开源的进销存系统都有哪些?

开源的进销存系统有很多&#xff0c;以下是其中一些比较流行的: OpenERP&#xff1a;一个集成了多个业务功能的开源ERP软件&#xff0c;可以实现进销存管理&#xff0c;会计&#xff0c;仓库管理&#xff0c;销售管理等业务功能。 Odoo&#xff1a;是OpenERP的一个分支&#x…

C语言进阶之冒泡排序

✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前情回顾 1、回调函数 2、冒泡排序 3、库函数qsort cmp&#xff08;sqort中的比较函数&#xff0c;需要我们自定义&#xff09; …

STM32F4串口USART发送为00的解决方案

检查接线是否正确检查TX是否为复用推挽输出 3.检查是否将TX和RX引脚重映射为USART功能 在STM32中&#xff0c;每个GPIO引脚可以配置为不同的复用功能&#xff0c;例如UART、SPI、I2C等。具体来说&#xff0c;GPIO_PinAFConfig函数用于配置GPIO引脚的复用功能。它的参数包括GPIO…

2023年【四川省安全员A证】复审考试及四川省安全员A证考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员A证复审考试根据新四川省安全员A证考试大纲要求&#xff0c;安全生产模拟考试一点通将四川省安全员A证模拟考试试题进行汇编&#xff0c;组成一套四川省安全员A证全真模拟考试试题&#xff0c;学员可通过…

c++|引用

目录 一、引用概念 二、引用特性 三、常引用 &#xff08;具有常属性的引用变量&#xff09; 四、使用场景 一、引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;他和他引用的变量共用同…