Source Insight配置Cppcheck做静态测试(Windows)

1.安装cppcheck

先从cppcheck官方网站下载cppcheck的安装包。

注:
(1)官网地址:https://sourceforge.net/projects/cppcheck
(2)截止2023年8月,官方发布的最新版本是cppcheck-2.11-x64-Setup.msi。

双击安装文件,根据安装向导,一步一步开始安装。

注:本实例中,安装路径是C:\Program Files\Cppcheck

除了安装cppcheck之外,还需要安装python,并且获取到MISRA.txt文本文件。这部分内容不在这里详细说明,假设你已经准备好了这些环境。

请确保Source Insight已经安装。下面开始进入正题。

2.关于配置文件misra.json

从2.88版本开始,Cppcheck支持插件(addon)。

可以通过下面的Cppcheck命令调用插件(addon):
cppcheck --addon=misra.py somefile.c
这将启动所有 Cppcheck 检查,并额外调用所选插件提供的特定检查。

一些插件需要额外的参数。我们可以在misra.json文件中配置插件和参数。

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

然后可以在 Cppcheck 命令行上执行配置:

cppcheck --addon=misra.json somefile.c

默认情况下,Cppcheck将在安装过程中指定的标准路径上搜索插件。你也可以直接设置此路径,例如:
cppcheck --addon=”C:\opt\cppcheck\configurations\my_misra.json” somefile.c
这允许你为不同的项目创建和管理多个配置文件。

第一次使用插件,会遇到很多问题。因为插件的配置文件misra.json很容易出错。
下面是一个可以成功运行的配置文件:

{"script": "misra.py","args": ["--rule-texts=C:/opt/cppcheck/configurations/misra2012_rules.txt"]
}

注意:"–rule-texts=***"的路径名必须使用左斜线“/”,而且路径名不能有空格!

我们把misra.json和misra2012_rules.txt放在“C:\opt\cppcheck\configurations”目录下。你可根据实际需求决定把它们放在哪里。

实际使用过程中,遇到几个问题。
(1)misra2012_rules.txt文件所在路径中不能有空格。否则cppcheck会找不到它们。例如“C:\Program Files\Cppcheck”存在空格,不满足要求。但是misra.json文件所在的路径可以有空格。
(2)misra.json配置文件中"–rule-texts=***"的路径名必须使用左斜线“/”!如果用右斜线“\”,则会报找不到文件。
(3)cppcheck命令执行时必须使用参数“–enable=all”才能检查到MIRSA违规项,否则检查结果为空白。下面是参数包含“–enable=all”的例子:

cppcheck --enable=all --addon="C:\opt\cppcheck\configurations\my_misra.json" settings.c

3.添加Source Insight的自定义命令

在这里插入图片描述
点击菜单[Tools]->[Custom Commands…],打开“Custom Commands”界面。
在这里插入图片描述
点击右上角的“Add”按钮,弹出“Add New Custom Command”对话框。输入“Cppcheck”后,点击“OK”按钮,返回“Custom Commands”界面。
在这里插入图片描述

“Run:”输入如下命令:
“C:\Program Files\Cppcheck\cppcheck.exe” --platform=win64 --enable=all --addon=“C:\opt\cppcheck\configurations\misra.json” %f
配置Output:选中“Iconic Windows”和“Capture Output”选项。其它不勾选。
配置Control:都不勾选。
配置Source Links in Output:选中“Parse Links in Output”选项。“Patterm Contains:”选中“File, then Line”选项。
其它的保持默认设置。

然后点击右下角的“Keys…”按钮,设置Cppcheck命令快捷键。
在这里插入图片描述
首先,确认“Command:”就是Cppcheck,然后点击“Assign New Key…”按钮,弹出提示对话框中,点击快捷键“alt+2”,之后“Keystokes”列表框中会添加我们按下的快捷键。最后,点击“OK”按钮。

测试:
(1) 打开任何一个文件;
(2) 按下快捷键“alt+2”,等待静态测试完成,即可看到显示的结果:
在这里插入图片描述

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

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

相关文章

rabbitmq卸载重新安装3.8版本

卸载之前的版本的rabbitmq 卸载rabbitmq 卸载前先停止rabbitmq服务 /usr/lib/rabbitmq/bin/rabbitmqctl stop查看rabbitmq安装的相关列表 yum list | grep rabbitmq卸载rabbitmq相关内容 yum -y remove rabbitmq-server.noarch 卸载erlang 查看erlang安装的相关列表 …

漏洞扫描和漏洞评估

进行漏洞扫描和漏洞评估是确保系统和应用程序安全性的重要步骤。 下面是一个详细的步骤指南,说明如何进行漏洞扫描和漏洞评估。 步骤: 信息收集: 在开始漏洞扫描之前,收集有关目标系统和应用程序的信息,包括IP地址、…

OnePlus Open可折叠手机:规格、价格、发布日期等详细信息汇总!

我们知道OnePlus可折叠手机即将问世,无论它是否被命名为OnePlus Open。我们迫不及待地想让它到来,为该公司再添一根弦,为最好的可折叠手机增添一个新的竞争对手。 OnePlus以前没有生产过任何可折叠产品,但它确实拥有合作伙伴公司Oppo的丰富知识,并可以向三星、摩托罗拉和…

前端工程化之模块化

模块化的背景 前端模块化是一种标准,不是实现理解模块化是理解前端工程化的前提前端模块化是前端项目规模化的必然结果 什么是前端模块化? 前端模块化就是将复杂程序根据规范拆分成若干模块,一个模块包括输入和输出。而且模块的内部实现是私有的&…

利用LLM模型微调的短课程;钉钉宣布开放智能化底座能力

🦉 AI新闻 🚀 钉钉宣布开放智能化底座能力AI PaaS,推动企业数智化转型发展 摘要:钉钉在生态大会上宣布开放智能化底座能力AI PaaS,与生态伙伴探寻企业服务的新发展道路。AI PaaS结合5G、云计算和人工智能技术的普及和…

Android相机-HAL-Rockchip-hal3

引言: 对于Android相机的 HAL层而言对上实现一套Framework的API接口,对下通过V4L2框架实现与kernel的交互。不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的? 代码目录: hardw…

destoon8.0自媒体类型综合资讯门户模板

随着时代发展,自媒体资讯适合当前的互联网情形。呕心沥血开发的一套自媒体综合门户网站模板,本模板采用纯手写开发,带会员中心。首页,列表页,内容页,搜索页面精心编写,非常大气,并配…

Stable Diffusion 文生图技术原理

图像生成模型简介 图片生成领域来说,有四大主流生成模型:生成对抗模型(GAN)、变分自动编码器(VAE)、流模型(Flow based Model)、扩散模型(Diffusion Model)。…

Android JNI系列详解之CMake配置库文件的输出目录

一、前提 阅读上一篇文章Android JNI系列详解之CMake编译工具的使用,里面讲到了需要配置两个文件:CMakeList.txt和build.gradle 二、配置CMake编译工具输出库文件的路径 1.默认的库文件输出路径:app/build/intermediates/cmake/debug/obj 由此…

element-ui中的el-table的summary-method(合计)的使用

场景图片: 图片1: 图片2: 一:使用element中的方法 优点: 直接使用summary-method方法,直接,方便 缺点: 只是在表格下面添加了一行,如果想有多行就不行了 1:h…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【一】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【一】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章…

RISC-V IOPMP实际用例-Andes SoC‘s Rapid-k模型

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。

PHPStudy 安装tp8 php8.2.9 安装XDbug、redis扩展

一、PhpStudy升级PHP版本,安装PHP8.2操作步骤 1.1、官网下载最新的php版本 打开Windows版的官网下载,地址:https://windows.php.net/download/ 页面上有不同的PHP版本,这里我们下载的是64位nts版的PHP8.2.9。 1.2、解压下载的文…

RabbitMQ---订阅模型分类

订阅模型分类 在之前的模式中,我们创建了一个工作队列。 工作队列背后的假设是:每个任务只被传递给一个工作人员。 在这一部分,我们将做一些完全不同的事情 - 我们将会传递一个信息给多个消费者。 这种模式被称为“发布/订阅”。 订阅模型示意…

List 去重两种方式:stream(需要JDK1.8及以上)、HashSet

1、使用Stream 方法 使用JDK1.8及以上 /*** Java合并两个List并去掉重复项的几种做法* param args*/public static void main(String[] args) {String[] str1 {"1", "2", "3", "4", "5", "6"};List<String&…

uniapp 开发微信小程序使用echart的dataZoom属性缩放功能不生效!bug记录!

在本项目中使用的是这个echart库 在项目中添加了dataZoom配置项但是不生效&#xff0c;突然想到微信小程序代码大小的限制&#xff0c;之前的echarts.js是定制的&#xff0c;有可能没有加dataZoom组件。故重新定制echarts.js。之前用的echarts版本是5.0.0&#xff0c;这次也是…

stm32单片机开关控制LED灯(中断方式)(proteus电路图)

注意了&#xff1a;一般人都是用按键button实现这个功能&#xff0c;但是我就是喜欢用Switch&#xff0c;然后我就用了Switch&#xff0c;喜欢的朋友欢迎看一看 不同地方在于&#xff1a;这里是interrupt 函数 void EXTI0_IRQHandler(void) {/* USER CODE BEGIN EXTI0_IRQn 0…

基于深度学习创建-表情符号--附源码

表情符号深度学习概述 如今,我们使用多种表情符号或头像来表达我们的心情或感受。它们充当人类的非语言线索。它们成为情感识别、在线聊天、品牌情感、产品评论等的关键部分。针对表情符号驱动的故事讲述的数据科学研究不断增加。 从图像中检测人类情绪非常流行,这可能是由…

爬虫用拨号好还是HTTP爬虫ip池好?

程序员小伙伴们&#xff0c;在进行爬虫时&#xff0c;你是否曾纠结于选择拨号还是代理&#xff1f;不要犯愁&#xff01;今天我将与你分享一些实用的择优技巧&#xff0c;帮助你在爬虫之路上实现更高效的提速&#xff01; 一、拨号和HTTP爬虫ip的优劣势分析 1、拨号 优势&…

Cpp学习——类与对象3

目录 一&#xff0c;初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二&#xff0c;单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…