代码静态测试工具之cppcheck

cppcheck简介

Cppcheck is an analysis tool for C/C++ code. It provides unique code analysis
to detect bugs and focuses on detecting undefined behaviour and dangerous
coding constructs. The goal is to detect only real errors in the code, and generate
as few false positives (wrongly reported warnings) as possible. Cppcheck is
designed to analyze your C/C++ code even if it has non-standard syntax, as is
common in for example embedded projects.
Supported code and platforms:
• Cppcheck checks non-standard code that contains various compiler extensions,
inline assembly code, etc.
• Cppcheck should be compilable by any compiler that supports C++11 or
later.
• Cppcheck is cross platform and is used in various posix/windows/etc
environments.
The checks in Cppcheck are not perfect. There are bugs that should be found,
that Cppcheck fails to detect.
代码静态测试工具极其丰富,这里不做赘述,仅对开源工具cppcheck的命令行搭建做记录。

cppcheck安装

上官网https://cppcheck.sourceforge.io/选择所需的版本安装
在这里插入图片描述
我这里下载的是2.9版本,下载速度若很慢,可选择镜像地址安装
在这里插入图片描述
安装过程中记得勾选addon选项,否则在安装路径下不会产生addons文件夹,若在命令行执行–addon指令则会报错。ps:cppcheck会通过python misra.py去解析misra规则,从而在生成的结果中,将警告或错误和misra规则关联起来,故电脑需要安装python。

在安装完cppcheck之后,最好将添加安装路径到环境变量,方便命令行的调用。

  • cppcheck
    打开命令行,键入cppcheck,会出现以下信息,说明环境变量设置成功
    在这里插入图片描述
    cppcheck关键词后面添加想要测试的文件路径,则会执行静态测试,并在命令行打印出结果 如:

    cppcheck C:\Users\Desktop\file1.c
    
  • –cppcheck-build-dir
    该指令用作设置cppcheck的路径,就是新建一个文件夹以保存测试过程中产生的数据,这样做有个优点就是,当你执行一次测试之后,产生了比如800个警告或错误,在你修改完一部分之后,重新进行测试的时候,cppcheck只会重新测试有修改点的文件,不会重新拉起全部测试。而不过没有这个指令,每次都会从头执行,若测试文件特别多,这样会很浪费时间。

  • –std=c99
    该指令用来设定语言标准是C99还是其他标准

  • –xml
    用来指示测试完成生成结果是xml格式

  • -i
    在测试中,有一些路径下的文件无需测试,比如MBD生成的文件已经满足misra的标准,那么通过-i 加文件路径的格式就可以达到这个目的,这个文件夹下的所有文件将不会被测试。当有多个路径需要被关闭时,每个路径都需要有独立的-i 如:-i “path a” -i “path b”

  • –addon
    如上所述,这里会添加一个json文件,这个json文件中指定python的文件,及misra的规则文件如:

 {
"script": "misra.py",
"args": [
"--rule-texts=./addons/misra2012_rules_dummy_ascii.txt"
] }

这里的misra.py和misra2012_rules_dummy_ascii.txt在cppcheck的官网都可以找到

  • –suppressions-list
    在测试过程中,有些警告是可以接受或者无法避免的或者不适用,就需要压制这些警告,具体做法是
    在这里插入图片描述
    可以利用–suppress指令单独声明,也可以按照上图的做法,将所有需要压制的ID写在一个txt文本中,作为一个list整体压制,当然是推荐后者。另外压制可以选择统一压制,也可以选择压制某个文件的某个ID,具体做法就是在ID后面跟文件的路径即可,也可以指定哪一行来压制。
  • misra2012_rules_dummy_ascii.txt
    可以在cppcheck路径下找到demo,本质是从misra官网下载规范,然后将Appendix A Summary of guidelines章节的规则号,描述等信息按照demo来填写形成一个txt文本。
    最后
    最后提供一个范例,直接复制在命令行执行,生成结果。移植到别的项目只需要切换路径即可。
cppcheck 
--cppcheck-build-dir="C:\cppcheck_demo\Cppcheck_build_folder" 
--std=c99 
--xml 
-i"C:\cppcheck_demo\Src\folderA" 
-i"C:\cppcheck_demo\Src\folderB" 
--addon="C:\cppcheck_demo\misra.json" 
--suppressions-list="C:\cppcheck_demo\suppress.txt" 
"C:\cppcheck_demo\Src" 2> "C:\cppcheck_demo\error.xml

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库期末考前复习题(单选+多选+判断+解答)

文章目录 #数据库考前复习题一、 选择1.单选题2.多选题 二、判断题三、解答请描述数据库中的三大范式关系型数据库ACID特性 #数据库考前复习题 一、 选择 1.单选题 1.使用limit进行分页查询,其中每页10条数据,查询第5页应该写为? SELECT *…

java: 程序包XXX.XXX.XXX不存在解决方法

背景介绍: com.DXG.bean 来源于同一个项目底下的另一个包 问题所在: 明明已经引入了相关包 但是编译的时候报错:java: 程序包com.DXG.bean不存在 问题分析: 怀疑是拆模块以后引入相关包没有将相关包下载到本地maven仓库中 所以…

Qt QLable 字符过长省略

前言: 项目中常用到字符过长问题,Qt默认的省略并不好用,不是自己想要的; QFontMetri 可使用 QFontMetri 当text的像素宽度超过width,将返回字符串的一个省略版本取决于mode。否则将返回原字符串; mode…

C++面向对象编程(3)——常用关键字介绍(TODO)

本篇会逐步添加一些C的关键字,持续更新... 一. default 1.1 场景 如果对构造函数进行了重载,则编译器不会隐式的生成一个默认的构造函数,此时如果调用了默认构造函数会在编译时报错,但是很多时候我们是需要默认构造函数的。如何…

基于IDEA创建Maven工程及注意事项

Java全能学习面试指南:https://javaxiaobear.cn 1. 概念梳理Maven工程的GAVP Maven工程相对之前的项目,多出一组gavp属性,gav需要我们在创建项目的时候指定,p有默认值,我们先行了解下这组属性的含义: Ma…

Mac电脑VSCode配置PHP开发环境

1.安装 PHP 首先,打开终端,安装 Homebrew,输入如下命令: $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装了 Homebrew 之后,你可以使用下面的…

Apache Airflow (八) :DAG任务依赖设置

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

User parameters自定义用户参数 (zabbix监控)

1、介绍和用法 ① 介绍 自定义用户参数,也就是自定义key 有时,你可能想要运行一个代理检查,而不是Zabbix的预定义 你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中…

LabVIEW关于USRPRIO的示例代码

LabVIEW关于USRPRIO的示例代码 USRPRIO 通常以两种方式使用: 1 基于 FPGA 的编程 对于希望修改USRP上的底层FPGA代码以添加自定义DSP模块的应用,请使用USRP示例项目。它可作为构建 USRP RIO 流式处理应用程序的起点,可从“创建项目”对话框…

服务注册发现 springcloud netflix eureka

文章目录 前言角色(三个) 工程说明基础运行环境工程目录说明启动顺序(建议):运行效果注册与发现中心服务消费者: 代码说明服务注册中心(Register Service)服务提供者(Pro…

基于JavaWeb+SSM+社区居家养老服务平台—颐养者端微信小程序系统的设计和实现

基于JavaWebSSM社区居家养老服务平台—颐养者端微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 在复杂社会化网络中,灵活运用社会生活产生的大数据&am…

Shopee买家号有什么作用?如何才能拥有大量的虾皮买家号?

对于卖家而言,用shopee买家号进行测评有以下几点好处: 1、随时随地可以给自己店铺下单、评价、点星 2、成本很低:都是自己准备一些资料进行注册的,因此成本也是比较可控的。 3、自己管理更加安全可控:每个账号都是独…

03-关系和非关系型数据库对比

关系和非关系型数据库对比 关系型数据库(RDBMS):MySQL、Oracl、DB2、SQLServer 非关系型数据库(NoSql):Redis、Mongo DB、MemCached 插入数据结构的区别 传统关系型数据库是结构化数据,向表中插入数据时都需要严格的约束信息(如字段名,字段数据类型,字…

C#WPF中的实现读取和写入文件的几种方式

说明:C#中实现读取和写入的类根据需要来选择。 1、File类 File类是用于操作文件的工具类,提供了对文件进行创建、复制、删除、移动和打开单一文件的静态方法。但需要注意的是,WPF中使用File的类,需要先引用System.IO下的命名空间。…

从零开始:打造疫苗预约抖音小程序的技术指南

这篇文章小编将与大家一同探讨如何开发一款疫苗预约的抖音小程序。 第一步:项目准备和规划 确定用户需要提供的信息,例如个人信息、接种地点偏好等。同时,考虑系统的用户界面设计,确保用户友好性和易用性。 第二步:…

验证k8s中HPA功能及测试

部署 使用yaml部署服务 apiVersion: apps/v1 kind: Deployment metadata:name: php-apachenamespace: tools spec:replicas: 1selector:matchLabels:app: php-apachetemplate:metadata:labels:app: php-apachespec:containers:- name: php-apacheimage: registry.cn-beijing.…

基于SpringBoot+Vue的新能源汽车充电桩管理系统

基于SpringBootVue的新能源汽车充电桩管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 充电桩详情 管理员界面 摘要 本项目是基于Spring Boot 和 …

百数低代码——为教育行业打开数字化转型之路

教育一直是人类社会发展与进步的基石,也是国之大计。教育既需要满足“千人千面”的获取知识需求,又需要保证教育本身的质量,因此教育培训方式一直在改变。 而如今,大数据、人工智能等新一代信息技术推动着传统教育向数字化教育发展…

event事件分发器||静态类型转换

由于类型不一样在event事件分发器中要进行静态类型转换,将基类转换为派生类进行处理 对event事件分发器拦截后最后要将其他函数交给父类处理,否则不会运行

Docker与VM虚拟机的区别以及Docker的特点

01、本质上的区别 VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用; Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应…