工具
电脑刷为乌班图:https://blog.csdn.net/qq_42108414/article/details/139417686
vscode(vscode是引用是基于字符笔记比较)
task.json:负责编译的
launch.json:负责运行的和gdb
需要安装的插件:
1.C/C++插件:大纲功能跟clangd有冲突
2.martial icon theme:更好看的文件标题
3.rainbow bucket:自动格式化
4.clangd:
代码可读性,code navigation,需要在项目的setting文件当中配置
"clangd.fallbackFlags": [
"-I头文件绝对路径"]用逗号间隔可配置多个
vscode配置clang-format(无需安装任何插件)
1.下载clang-format-10
sudo apt install clang-format-10
2.在vscode配置中搜索format,把执行目录改成clang-format-10的安装路径
并且开启format on save
3.在项目目录底下建立.clang-format文件,把格式内容复制到这里边
返回上一部ctrl+alt+-
task.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++"
}
]
}
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": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
vscode快捷键
ctrl + +/-:UI放大或者缩小
空中换行:ctrl + enter
上/下调换:alt + up/down
按照代码块移动光标:ctrl+ 左键头/右箭头
选单行/多行 ctrl + l
删除单行:shift + delete
复制光标所在行:什么也不粘贴ctrl+c,再ctrl+v
展示/隐藏下栏:ctrl + j
):定位当前编辑的文件
关闭/打开左栏:ctrl + b
切换标签:ctrl+tab
命令面板:ctrl+shift+p
在左栏搜索文件:ctrl+p
多行光标:alt+Lclick
查看一个文件当中的各个函数:ctrl + shift + .
高亮:ctrl+D
vscode插件:
bookmarks
前一个书签:ctrl + j
新建书签:ctrl + k
后一个书签:ctrl + l
查看汇编的代码
https://www.godbolt.org/
静态代码检测
clang-format
# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language: Cpp
# 未在配置中专门设置的所有选项所使用的样式
BasedOnStyle: Google
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: AlwaysBreak
# 连续赋值时,对齐所有等号
AlignConsecutiveAssignments: true
# 连续声明时,对齐所有声明的变量名
AlignConsecutiveDeclarations: true
# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Right
# 水平对齐二元和三元表达式的操作数
AlignOperands: true
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
AllowShortFunctionsOnASingleLine: Empty
# 允许短的lambda放在同一行
AllowShortLambdasOnASingleLine: Empty
# 允许短的if语句保持在同一行
AllowShortIfStatementsOnASingleLine: true
# 允许短的循环保持在同一行
AllowShortLoopsOnASingleLine: false
# 总是在定义返回类型后换行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),
# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
AlwaysBreakBeforeMultilineStrings: false
# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: true
# false表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true
# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: true
# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
BreakBeforeBinaryOperators: All
# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),
# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),
# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
# 注:这里认为语句块也属于函数
BreakBeforeBraces: Allman
# 继承列表的逗号前换行
BreakBeforeInheritanceComma: false
# 在三元运算符前换行了诉讼
BreakBeforeTernaryOperators: true
# 在构造函数的初始化列表的逗号前换行
BreakConstructorInitializersBeforeComma: false
# 初始化列表前换行
BreakConstructorInitializers: BeforeComma
# Java注解后换行
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
# 每行字符的限制,0表示没有限制
ColumnLimit: 160
# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
CommentPragmas: '^ IWYU pragma:'
# 紧凑 命名空间
CompactNamespaces: false
# 构造函数的初始化列表要么都在同一行,要么都各自一行
ConstructorInitializerAllOnOneLineOrOnePerLine: true
# 构造函数的初始化列表的缩进宽度
ConstructorInitializerIndentWidth: 4
# 延续的行的缩进宽度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括号{后和}前的空格
Cpp11BracedListStyle: false
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false
# 关闭格式化
DisableFormat: false
# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
ExperimentalAutoDetectBinPacking: false
# 固定命名空间注释
FixNamespaceComments: true
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前),
# 可以定义负数优先级从而保证某些#include永远在最前面
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
# 缩进case标签
IndentCaseLabels: true
IndentPPDirectives: None
# 缩进宽度
IndentWidth: 4
# 函数返回类型换行时,缩进函数声明或函数定义的函数名
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 开始一个块的宏的正则表达式
MacroBlockBegin: ''
# 结束一个块的宏的正则表达式
MacroBlockEnd: ''
# 连续空行的最大数量
MaxEmptyLinesToKeep: 1
# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
NamespaceIndentation: None
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth: 4
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty: true
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
# 在一个注释中引入换行的penalty
PenaltyBreakComment: 300
# 第一次在<<前换行的penalty
PenaltyBreakFirstLessLess: 120
# 在一个字符串字面量中引入换行的penalty
PenaltyBreakString: 1000
# 对于每个在行字符数限制之外的字符的penalty
PenaltyExcessCharacter: 1000000
# 将函数的返回类型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine: 60
# 指针和引用的对齐: Left, Right, Middle
PointerAlignment: Left
#RawStringFormats:
# - Delimiter: pb
# Language: TextProto
# BasedOnStyle: google
# 允许重新排版注释
ReflowComments: false
# 允许排序#include
SortIncludes: false
SortUsingDeclarations: true
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 模板关键字后面添加空格
SpaceAfterTemplateKeyword: true
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 开圆括号之前添加一个空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements
# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false
# 在尾随的评论前添加的空格数(只适用于//)
SpacesBeforeTrailingComments: 4
# 在尖括号的<后和>前添加空格
SpacesInAngles: false
# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
SpacesInContainerLiterals: true
# 在C风格类型转换的括号中添加空格
SpacesInCStyleCastParentheses: false
# 在圆括号的(后和)前添加空格
SpacesInParentheses: false
# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
SpacesInSquareBrackets: false
# 标准: Cpp03, Cpp11, Auto
Standard: Cpp11
# tab宽度
TabWidth: 4
# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: Never
polyspace:以静态检测的方式检测运行时的错误
绿色:正确的代码
红色:一定错误
灰色:不可达的代码
橙色:某一部分,在某种条件下会发生错误,不是一定会发生的
紫色:是否符合编码标准
黑色:注释
应用场景:
PolySpace 主要用于嵌入式软件开发领域。由于其与 MATLAB/Simulink 等工具的集成,PolySpace 在分析嵌入式 C 和 C++ 代码方面表现出色。它特别关注运行时错误、未定义的行为和内存泄漏等问题。
PCLint 则适用于多种编程语言的静态代码分析,包括 C、C++、C# 和 Java。PCLint 的应用范围更广泛,可以帮助开发人员识别和纠正潜在缺陷、代码风格问题和错误。
功能重点:
PolySpace 的功能重点主要是解决嵌入式软件中的运行时错误和安全问题。它能够提供详细的诊断信息和修复建议,帮助开发人员确保代码质量和可靠性。
PCLint 则更侧重于代码风格和规范的检查,以及潜在的编程错误。PCLint 的检查方式更严格,可以帮助开发人员遵循一致的代码规范和最佳实践。
使用方式:
PolySpace 可以与 MathWorks 其他工具集成,例如 MATLAB 和 Simulink,使得开发人员可以在一个统一的环境中完成代码分析、仿真和验证。PolySpace 提供了更加可视化和用户友好的界面。
PCLint 则作为一个独立的静态代码分析工具存在,可以直接运行于命令行或集成到各种集成开发环境(IDE)中。PCLint 的使用方式更加灵活,可以根据开发团队的需求进行定制配置。
Polyspace和PClient是两种不同的工具,各自有其特定的用途和功能。下面简要介绍它们各自的特点:
Polyspace(MathWorks出品):
类型:静态代码分析工具
主要功能:用于检测代码中的运行时错误和潜在缺陷,如未定义的行为、内存泄漏、溢出等。
优势:能够在不执行程序的情况下发现代码问题,有助于提高代码质量和减少错误。
适用场景:适合在软件开发过程中进行静态分析,帮助开发人员识别和修复潜在问题。
PClient(各家公司均有类似产品):
类型:性能测试工具或者压力测试工具
主要功能:用于模拟多用户访问、测试系统性能和稳定性,通常会模拟大量并发用户对系统进行压力测试。
优势:能够帮助评估系统的性能特征,如吞吐率、响应时间等,并发现系统在高负载下的表现。
适用场景:适用于评估系统在真实环境下的性能表现,发现系统在高压力下可能存在的问题。
综上所述,Polyspace主要用于静态代码分析,帮助发现并预防代码中的错误;而PClient等性能测试工具主要用于评估系统的性能表现和稳定性。
测试脚本
1.单元测试(Unit Testing):Google Test
意义:单元测试是对代码中最小单位(通常是函数或方法)进行测试的一种测试方法,用于验证每个单元的功能是否符合预期。
举例:假设有一个函数int add(int a, int b)用于计算两个整数的和,对该函数编写单元测试,验证该函数对不同参数的输入是否能够正确返回期望的结果。
2.集成测试(Integration Testing):
意义:集成测试是将多个单元组合在一起进行测试,验证这些单元之间的交互和接口是否能够正确协同工作。
举例:在一个软件系统中,将多个模块或组件集成在一起进行测试,确保它们能够正常协同工作,并且没有出现接口不匹配或数据传递错误等问题。
3.验收测试(Acceptance Testing):
意义:验收测试是从用户的角度出发,验证整个系统是否满足用户需求和预期,通常由用户或业务代表执行。
举例:在一个电商网站开发完成后,用户可以进行验收测试,测试网站的功能是否符合他们的需求,如添加商品到购物车、下单支付等操作是否正常。
4.性能测试(Performance Testing):
意义:性能测试是对系统进行压力测试,验证系统在不同负载情况下的性能表现,如响应时间、吞吐量等。
举例:在一个在线游戏平台上进行性能测试,模拟大量玩家同时访问并进行游戏,测试服务器在高负载下是否能够稳定运行。
5.安全测试(Security Testing):
意义:安全测试是对系统的安全性进行评估,验证系统在面临恶意攻击或非法访问时是否能够保护用户数据和系统可靠性。
举例:对一个金融应用程序进行安全测试,检查是否存在漏洞、SQL注入、跨站脚本等安全问题,并提出改进建议。
tcl脚本,基于vtp这个软件
目的:
主要目的:将每条命令下发
次要目的:将命令的所有情况涵盖
单元测试:gooltest
信息搜索技术
信息搜索技术:我的目标:找到最新的技术文献
为什么搜索why:知道,学习,创作,完成工作
->搜索什么
1.信息咨询:新闻
2.知识技能:概念,文章,教程
3.素材文件:食品,音频
4.工具软件:插件,软件
->去哪里搜索
搜索效率:
谷歌>公众好>短视频>百度
谷歌搜索语法:
限定关键词:“xxx”即限定包含xxx
找到pdf后ctrl+f
限定标题:intitle:xxx 标题中必包含这个xxx
限定多个关键词标题:allintitle
限定内容关键词:intext xxx
限定url:inurl:cctv
限定网站:site:
限定图片大小:imgsize:2560*3840
限定文档格式:filetype
搜索到内容之后,可以通过内容中的关键字再进行替换,再进行搜索,逐步缩小范围
->怎么搜索
学习差距=信息差✖时间投入
惊人的成长:
听到不明白的词汇,找到这个词语所在的专业领域,弄懂它
https://cn.similarsites.com/同类的网站+google
论文:谷歌学术+sci-hub(不是特别新)
电子书:鸠摩艘书 英语:
学习视频:best learning online website
在线剪辑创作网站:canva.com