[ Linux ] 静态代码检测工具 —— Cppcheck工具

news/2023/12/4 19:35:35

文章目录

    • cppcheck工具介绍
    • Linux安装
    • linux使用示例
    • 在makefile中添加cppcheck工具实例


cppcheck工具介绍

什么是静态代码检查?
静态代码检查是指在不运行程序的条件下,进行程序分析的方法。有些程序分析需要在程序运行时才能进行,这种程序分析称为动态程序分析。

静态代码检查是一种补充检查,应在先编译通过的基础上,再作进一步检查,否则反而顾此失彼、浪费时间;动态可能会暴露并需要进一步定位的问题(如没有判空指针之类的),有可能可以通过静态检查先提前警告代码作者去提前更加关注某部分内容代码的编写,从而一定程度上节省自测定位时间。
静态程序分析的复杂程度依所使用的工具而异,简单的只考虑个别语句及声明的行为,复杂的可以分析程序的完整源代码。

Cppcheck:免费软件,开包即用。支持跨平台图形化界面。


Linux安装

方法一、apt-get安装
sudo apt-get install cppcheck
sudo apt-get install cppcheck-gui
cppcheck --version

cppcheck安装出现小状况
cindy@ubuntu:~$ sudo apt-get install cppcheck
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
解决方法:
sudo killall apt apt-get
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
sudo dpkg --configure -a
sudo apt update

方法二、手动安装cppcheck源码包
官网下载cppcheck源码包(.tar.gz)

解压压缩包并进入文件
tar -zxvf cppcheck-2.10.tar.gz && cd cppcheck-2.10/

创建一个build的文件夹,进入build的文件夹
mkdir build && cd build

首先使用cmake …命令将CMakeLists.txt转换为make所需要的makefile
cmake …

然后,通过make开始编译,-j是代表jobs,表示使用多少个线程进行编译
make -j 8

查看是否生成cppcheck的可执行文件
root@ubuntu:/opt/software/cppcheck-2.10/build/bin$ ls -la
total 92040
drwxr-xr-x 5 root root 4096 May 19 15:52 .
drwxr-xr-x 11 root root 4096 May 19 15:49 …
drwxr-xr-x 4 root root 4096 May 19 15:50 addons
drwxr-xr-x 2 root root 4096 May 19 15:50 cfg
-rwxr-xr-x 1 root root 90078632 May 19 15:52 cppcheck
-rwxr-xr-x 1 root root 4141888 May 19 15:50 dmake
drwxr-xr-x 2 root root 4096 May 19 15:50 platforms

将可执行文件添加到环境变量中使用
vi ~/.bashrc

然后点击i键进行编辑状态,文件末尾输入
export RATH=/opt/software/cppcheck-2.10/build/bin:$PATH

按下Esc,输入:wq保存,然后执行source /etc/profile,可直接使用cppcheck进行相关操作
同步

source ~/.bashrc


linux使用示例

(1)检查当前路径下的代码,并输出到 txt 文件
cppcheck . --output-file=err.txt
(2)检查某个路径,不输出过程日志
cppcheck --quiet …/myproject/
(3)启用所有检查规则,检查某个文件
cppcheck --enable=all --inconclusive --std=posix test.cpp
(4)输出 xml 格式的日志文件
cppcheck src --enable=all --output-file=log.xml --xml


在makefile中添加cppcheck工具实例

STM32开发(二十一)添加代码静态检测详解 —— Cppcheck工具


http://www.ppmy.cn/news/83166.html

相关文章

使用VitePress和Github搭建个人博客网站,可以自动构建和发布

之前我们写过一篇关于如何自动构建和发布个人博客的文章,当时是使用VuePress和GitLab。GitLab持续集成部署CI/CD初探:如何自动构建和发布个人前端博客 现在换了Vue3和Vite,使用VitePress在Github上又搭建了一个博客。博客地址: …

Android SpanStringBuilder ClickableSpan内存泄漏和crash的解决方案

这个问题属于老生常谈,使用SpanStringBuilder的ClickableSpan,有如下因素导致各种问题: google对于ClickableSpan,内部TextView创建了很多内部类和变量去持有XXXSpan会导致内存泄漏, google原生代码有缺陷&#xff1b…

js正则校验特殊的不可见字符

背景 表单的输入框,用户可能从Excel或者其他地方直接复制粘贴,这时候提交到后端会导致获取的用户输入中包含一些特殊的不可见字符,比如tab键或者制表符等,这时需要在前端对用户输入做一些检验,检查是否存在不可见字符…

安科瑞电力监控系统在虹科创新改造项目的应用

摘要:随着电力系统正向着高可靠性、高自动化、高信息化水平方向迅猛发展,对电网的监控已成为国内外高度重视的关键问题,特别是监控系统在电力系统中起着控制和监测等重要作用。本文针对开闭所供配电系统特点及供配电系统高可靠性的要求&#…

宝塔PHP7.1版本37个扩展作用介绍

PATH_INFO:这个扩展可以让PHP获取到URL中的PATH_INFO信息,方便处理URL路由。 bt_safe:这个扩展可以帮助PHP防止一些常见的安全漏洞,比如SQL注入、XSS攻击等。 ionCube:这个扩展可以对PHP代码进行加密,保护…

Scrapy CrawlSpider介绍和使用

一、介绍CrawlSpider CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类,其设计原则只是为了爬取…

用ArcGIS绘制研究区地图

科研tips:ArcGIS中国地图构建教程 有同学提问:怎么画论文最常用的研究区地图呢? 论文用图对准确性和美观度有一定要求,而ArcGIS具有强大的地图制作功能,可以利用该软件快速制作研究区地图。 01 地图的导入 &#…

单调栈、单调队列——挖呀挖呀挖呀挖

凑个热闹,这几天给学生讲单调栈和单调队列,所以也在挖呀挖。在说为啥挖呀挖之前,先说说这俩是干嘛的: 单调栈:求i位置右侧第一个比arr[i]大或小的值。有趣的是当求右侧第一个i大的值时同时会求出左侧第一个比它大的&a…

5.7 Vue中this.$nextTick()方法的使用及代码示例

Vue中this.$nextTick方法的使用及代码示例 目录一、 $nextTick()概述1. $nextTick()原理2. $nextTick()作用 二、$nextTick()常见应用场景1. 改变数据后更新DOM元素2. 获取更新后的DOM尺寸和位置3. 执行复杂的计算4. 在父组件中,等待子组件数据更新后再执行操作5. 等…

二叉树高度计算方法

二叉树高度计算方法 二叉树的高度-递归法 #include <iostream> #include <cstdio>using namespace std;struct treeNode {int a; // 数据成员struct treeNode *pFather; // 父节点struct treeNode *pLeft; // 左孩子struct treeNode *pRight; // 右孩子 };/*** 得…

00后职场人,怎么做到刚来就涨薪5k? 原因竟是学会了这个宝藏工具

经常有粉丝问我有“有哪些适合绝大多数普通职场人的制作大屏的工具&#xff1f;” 确实&#xff0c;在这个内卷的时代&#xff0c;大家想要的是更加炫酷的汇报效果。要满足大多数职场人的大屏工具首先一定要满足以下三点&#xff1a; &#xff08;1&#xff09;简单易上手&am…

使用自己的数据利用pytorch搭建全连接神经网络进行分类预测

使用自己的数据利用pytorch搭建全连接神经网络进行分类预测 1、导入库2、自定义函数3、定义主函数main()4、执行5、完整代码部分 这段代码实现了一个神经网络模型在数据集上的训练和测试。具体流程如下&#xff1a; 1、导入库 引入必要的库&#xff0c;包括PyTorch、Pandas等。…

Keep your Eyes on the Lane Real-time Attention-guided Lane Detection 论文精读

关注车道&#xff1a;实时注意力引导车道线检测 摘要 现代车道线检测方法在复杂的现实世界场景中取得了显著的性能&#xff0c;但许多方法在保持实时效率方面存在问题&#xff0c;这对自动驾驶汽车很重要。在这项工作中&#xff0c;我们提出了LaneATT&#xff1a;一种基于锚点…

如何利用AI学习区块链知识,ChatGPT x Kapa.ai ⇒ 开发者的福音

由OpenAI推出的人工智能聊天机器人ChatGPT在各大平台掀起了一阵狂热之风。发布仅四个月的时间&#xff0c;获得超一亿用户&#xff0c;成长速度远高于现今网络应用巨头脸书和Amazon。随着最新版本GPT-4的正式上线&#xff0c;其AI性能和完善程度再度提升&#xff0c;深受用户和…

java链表——LinkList详解

LinkList详解 注&#xff1a;在学习LinkList之前可以先去看一下我的另一篇博客单链表的定义及其模拟实现——java https://editor.csdn.net/md/?articleId130642627&#xff0c;有助于本博客的理解 ArrayList和LinkedList的区别 LinkList模拟实现 定义三个类&#xff1a;MyL…

Progressive Tree-Based Compression of Large-Scale Particle Data | 学习笔记

这里写目录标题 目标摘要1.简介2.相关工作3.背景4. 树的构造4.1 奇偶分裂与奇偶树4.2 混合树4.3 块混合树5. 树遍历5.1 自适应遍历5.2块自适应遍历6. 编码节点值6.1 二项编码方案6.2 奇偶上下文编码7 评估和结果7.1 k-d树自适应遍历7.2 混合树和块混合树的遍历7.3 速度和内存占…

国标28181-2022 变更说明

此为国标28181协议的第3版本&#xff0c;变更调整较大&#xff1a;正式发布之后替代了原国标28181-2011协议和国标28181-2016版本的协议 此次参与修订的企业&#xff1a;公安部第一研究所&#xff0c;视频图像信息智能分析与共享应用技术国家工程实验室&#xff0c;国家信息中…

23 # generator 的使用

1、类数组&#xff1a;长的像数组 const likeArray {0: "a",1: "b",2: "c",3: "d",length: 4 };可以 Array.from 将类数组转为数组 Array.from(likeArray) // [ a, b, c, d ]也可以使用拓展运算符&#xff1a;原理就是遍历这个对象…

快速实现pytest自定义配置项,让Web自动化测试更便捷!

目录 前言&#xff1a; 一、什么是pytest.ini 二、在pytest.ini中添加自定义配置项 三、使用自定义配置项 四、结论 前言&#xff1a; WEB自动化测试是一个重要的环节&#xff0c;需要结合框架和工具进行开发。在WEB自动化测试中&#xff0c;常用的是pytest框架&#xff…

双指针题目学习

主题 在算法比赛中&#xff0c;双指针的题目涉及的特别多&#xff0c;无论是大学时候的acm比赛还是蓝桥杯比赛中&#xff0c;都有许多涉及双指针的做题思路&#xff0c;在之后的工作面试中&#xff0c;手写代码环节中&#xff0c;双指针的思想也是经常能使用到的。 算法思路 …
最新文章