Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
github_CI_action
github
[github][action] RTT 静态代码检测cppcheck
发布于 2023-04-11 00:00:35 浏览:937
订阅该版
[tocm] ## 简介 之前有接触过cppcheck等静态代码检查工具。 我们先看下cppcheck有哪些作用 Cppcheck是一个开源的静态代码分析工具,被广泛应用于C / C++工程环境中。它能够自动分析C / C++代码,并给出静态分析报告。Cppcheck能够捕捉到的错误包括内存管理错误、线程安全问题、不安全的类型转换、未初始化的变量、代码重复等。 作为一款静态代码分析工具,Cppcheck的作用不仅仅只是检测代码缺陷和错误,还能够对代码进行质量分析,评估代码的可读性和可维护性。 下面是Cppcheck的具体作用: 1. 帮助发现潜在问题 Cppcheck可以检测C/C++代码中存在的内存泄漏、缓冲区溢出等错误,发现潜在的问题后可以及时进行修复,提高代码质量。 2. 提高代码的可读性 当代码无法清晰地表达其实现时,它就很难让其他开发人员理解,这往往会导致项目的延误和维护成本的上升。Cppcheck可以检测代码中语法错误、拼写错误以及未使用的变量和函数等等,优化代码的可读性。 3. 降低测试成本 代码错误可能会影响整个应用程序的完整性和安全性。使用Cppcheck可以检测出潜在的问题,并在代码提交之前通知开发人员,降低测试成本,加速开发流程。 4. 保障代码安全 在代码开发过程中,必须确保代码不会被攻击者利用来攻击系统。使用Cppcheck可以帮助发现潜在问题,如未定义的行为、缓冲区溢出等,从而提高代码的安全性。 总之,Cppcheck不仅可以帮助您检测代码中存在的错误,还能够提高代码质量、降低测试成本、保障代码安全。它在各个行业中都有广泛应用,是开发过程中不可或缺的利器。 ## 如何使用cppcheck 那cppcheck如此好用,我们如何在RTTHREAD中使用它呢? 之前我有讲过一篇文章,简单介绍下如何在git hook中集成cppcheck。 [ 看完这篇文章再也不用担心代码格式不对无法合并了 ](https://club.rt-thread.org/ask/article/ba9a96bb1e6da349.html) 大概知道cppcheck只需要一句话命令即可: ``` cppcheck --enable=warning,performance,portability --inline-suppr --error-exitcode=1 --force $changed_files ``` 下面是具体的参数含义: `--enable`: 该参数后跟一个逗号分隔的选项列表,用于启用Cppcheck的指定检查项。其中,`warning`、`performance`和`portability`分别表示启用警告、性能和可移植性检查。如上例所示,启用这些选项将有助于检测C/C++代码中存在的缺陷和不良编程实践。 `--inline-suppr`: 该参数用于启用行内禁止指令,即将用于禁止某些错误或者警告的注释作为代码的一部分。这样,Cppcheck会在分析源代码时跳过这些部分而不会对其进行警告或错误提示。 `--error-exitcode=`: 该参数后跟一个表示Cppcheck错误数量阈值的整数值。在Cppcheck检查出的错误数量超过此阈值时,Cppcheck将返回1,以表示检查失败。否则,返回0。 `--force`: 该参数用于强制Cppcheck分析所有源代码文件,即使它们已经被标记为通过行内禁止指令禁用。如果您使用了行内禁止指令,但仍希望Cppcheck分析被禁止的文件,可以使用此选项。 ## 如何在RTTHREAD中集成cppcheck 我们都知道在github仓库中,有个github action,用来自动化集成处理一些PR的内容的。 我们可以在下面目录中新建一个`/.github/workflows/static_code_analysis.yml` 下面的yml里面是所有内容 ``` name: Static code analysis on: pull_request: branches: - master jobs: scancode_job: runs-on: ubuntu-latest name: Static code analysis steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: 3.8 - name: cppcheck shell: bash run: | sudo apt-get update sudo apt-get -qq install cppcheck git remote -v git fetch origin cppcheck --version ls git branch -a changed_files=$(git diff --name-only HEAD origin/master | grep -E '\.(c|cpp|cc|cxx)$' || true) if [ -n "$changed_files" ];then cppcheck --enable=warning,performance,portability --inline-suppr --error-exitcode=1 --force $changed_files err=$? if [ $err -ne 0 ]; then echo "CPPCHECK REPORT, PLEASE CHECK THE WARNING !!!!!!!!!" fi fi ``` 这里我们设定只有在PR的时候回去检查, 检查的时候,采用ubuntu, 安装cppckeck使用命令`sudo apt-get -qq install cppcheck` 然后我们需要整理出需要检查的.c文件, 通过命令`git diff --name-only HEAD origin/master | grep -E '\.(c|cpp|cc|cxx)$'` 我们可以找到你当前branch和主分支上的差异文件,并且过滤出.c的源文件进行静态代码检测。 具体的检测成功的效果图: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20230410/ba2b5106d5353fd8835c85899c8310ac.png) 检测失败的效果图: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20230410/9acbb0da31a1d012dc19d665efa62077.png.webp) ## 最后总结 cppcheck只检查.c文件,所以它没有对.h文件综合检查,只是检查一些编译不会检查的漏洞,比如数组越界等。 所以只是给一些PR的小伙伴做参考,如果你觉得代码没有太大必要修改,可以不用管这个CI的检查结果。当然如果觉得有必要修复,可以尝试修复以下。 我们暂且试运行一段时间,如果你有更好的解决方案能够做一些静态代码检查,也欢迎PR一起来维护, https://github.com/RT-Thread/rt-thread/blob/master/.github/workflows/static_code_analysis.yml cppcheck选项可以参考官方[manual](http://cppcheck.net/manual.pdf) # 小伙伴,你们平时接触的静态代码检查是什么样子的?欢迎评论区留言。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
RTT_逍遥
https://github.com/supperthomas
文章
36
回答
499
被采纳
75
关注TA
发私信
相关文章
1
RT_Thread ENV 下载问题
2
github下载时总是中断失败
3
提高github的响应速度
4
RT-thread ENV 工具配置软件包时总是无法连上git网址,无法下载?
5
软件包下载问题解决经验
6
无法下载littlevgl 软件包
7
软件包无法下载(已解决)
8
RT-Thread studio 如何更换git下载源?
9
【github】大家在用github有哪些问题
10
github登录不了,重置密码也不行
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部