Coverity本地增量C/C++代码检查(Linux)操作简介

【关注我,后续持续新增专题博文,谢谢!!!】

上一篇我们讲了

        这一篇我们开始讲 Coverity本地增量C/C++代码检查(Linux)操作简介

目录

【关注我,后续持续新增专题博文,谢谢!!!】

一、Coverity工具简介

二、:Linux本地coverity扫描

    2.1:适用范围&说明

    2.2 :工具安装与环境配置

         2.2.1 :工具安装

         2.2.2 :环境配置

    2.3 :编译&检查

          2.3.1 :执行cov-run-desktop --setup

          2.3.2 :执行cov-build 编译检查

          2.3.3 :确认可分析的文件列表

    2.4 :文件分析

2.5 :输出成html报告

【关注我,后续持续新增专题博文,谢谢!!!】


一、Coverity工具简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

Coverity产品概述

Coverity 利用精确和有效的修复指南,基于专利技术以及对 100 亿行专用和开源代码的十年研发和分析经验,可以识别出开发期间的关键质量缺陷和潜在安全漏洞,有助于降低风险和整体项目成本。

Coverity支持语言

Coverity提供全面广泛的安全漏洞和质量缺陷检查规则,如Java、C/C++等,涵盖22种编程语言。

二、:Linux本地coverity扫描

    2.1:适用范围&说明

已经有coverity问题,本地修改代码后,需要在本地linux编译环境进行代码分析的工程师,下述每个步骤都需要执行确认!!
整个过程如下:
工具安装与环境配置 --> 编译代码 --> 分析文件 --> 生成html报告

    2.2 :工具安装与环境配置

         2.2.1 :工具安装

首先,确认本地的coverity版本。目前版本与coverity版本对应关系如下:
Coverity工具各个版本在个人调试云上都有,目录:/work/coverity/,因此本地使用哪个版本,配置一下对应的工具path即可,如:
#analysis_2023_3.2版本
export PATH=/work/coverity/analysis_2023_3.2/bin/:$PATH

#analysis_2024_3.0版本
export PATH=/work/coverity/analysis_2024_3.0/bin/:$PATH

其次,本地确认coverity版本,与coloros版本匹配可以跳过3.2.1章
  执行命令:cov-build

验证安装结果
cov-build


如果出现的版本信息与安装版本一致,则代表安装成功,如果版本不一致,执行以下命令:
source /etc/profile
**若出现无权限的报错提示,并不影响执行效果**
cov-build
如果已安装cov-build,也可以手动设置变量PATH
export PATH=/work/coverity/analysis_2023_3.2/bin/:$PATH

        版本:2023.3.2
        路径:/work/coverity/analysis_2023_3.2
 

         2.2.2 :环境配置

配置认证文件


请拷贝账号authkeys目录到个人用户目录下 ~/.coverity/
mkdir ~/.coverity
cp -rf /work/coverity/authkeys/ ~/.coverity/
chmod 600  ~/.coverity/authkeys/ak*
10.21.211.12 和172.18.148.20 服务器的key文件如下,拷贝到路径~/.coverity/authkeys/下,拷贝后需执行chmod 600命令。
其他服务器key文件在/work/coverity/authkeys/下是正确的,无需其他操作

配置coverity.conf


1、请将coverity.conf文件拷贝到代码根目录下
cp -rf /work/coverity/coverity.conf <代码目录>/source/

2、进入到代码根目录下,修改coverity.conf文件内容:host、stream、compiler_config_file
   整个扫描过程会将本地扫描结果与coverity服务端数据进行比对,如果是服务端已存在并忽略的问题,本地html报告也不会呈现。所以需要配置要比对的coverity服务器host与数据流stream。


若涉及java文件扫描,需修改javac

(如果不扫描java文件可跳过此步)
            由于Coverity工具缺陷,不能直接检查jdk11或jdk17编译的代码,无法正常捕获到文件,故需要进行特殊处理:
注意:Android-T的项目需要操作jdk11,Android-U的需要操作jdk17,Android-V的jdk21
修改完jdk后,需要重命令jdk11-real/jdk17-real/jdk21-real中Android.bp为Android_bak.bp

类似报错如下:
重命名Android.bp否则编译报错(prebuilts/jdk/jdk17/Android.bp, 第15行:module "prebuilt_javap" already defined)

###备份原始的jdk 注意:要操作对应jdk版本
cp -r <代码路径>/prebuilts/jdk/jdk11/ <代码路径>/prebuilts/jdk/jdk11-real
###删除老的javac
rm <代码路径>/prebuilts/jdk/jdk11/linux-x86/bin/javac
###重新生成javac
vim <代码路径>/prebuilts/jdk/jdk11/linux-x86/bin/javac

###将以下3行内容写入javac并保存

#!/bin/sh
javacpath="`echo $0 | sed 's|/jdk11/|/jdk11-real/|'`"
"$javacpath" "$@"

###给javac增加执行权限
chmod +x <代码路径>/prebuilts/jdk/jdk11/linux-x86/bin/javac

cd <代码路径>/prebuilts/jdk/jdk11-real
mv Android.bp Android_bak.bp

    2.3 :编译&检查

          2.3.1 :执行cov-run-desktop --setup

批量执行以下内容:
export ALLOW_NINJA_ENV=true 
export COVERITY_NO_PRELOAD_CLASSES="java.io.ObjectInputStream;java.lang.UNIXProcess"
cov-run-desktop  --setup

          2.3.2 :执行cov-build 编译检查

【编译过程建议】
第一步:完整编译
此时不要带cov-build,可以全编译组件 或者 模块编译
第二步:修改文件
此时可以修改代码解决问题
第三步:cov-build编译

首次扫描需要进行一次coverity的全编译,会比较慢,另外,Coverity的编译会受原生编译的影响,大概率是本地原生编译已经过了,未做任何修改,再进行coverity编译时,由于是增量编译,没有任何文件修改,没有文件被再次编译。解决方案:
1、删除原生编译的相关out目录 如sys/out   vnd/out
2、删除掉idir
3、重新执行cov-build --dir idir 编译命令

          2.3.3 :确认可分析的文件列表

先罗列patch修改的文件列表 (一般是.c/.cpp/.java 这类文件)
执行下述命令查看具体哪些文件能够分析,只有在该列表中且无错误的文件才能进行分析。注:多个文件之间用竖线间隔,竖线前后没有空格
cov-manage-emit --dir idir list | grep -E '目录1/文件1|目录2/文件2|文件3'

    2.4 :文件分析

获取到上步可分析的文件列表后,执行下述命令:
cov-run-desktop --dir idir --reference-snapshot latest --set-new-defect-owner false --whole-program [filename1] [filename2] [分析多个文件,空格隔开]
备注:可以分析多个文件,以空格隔开文件(前提是该文件被编译捕获到了)


另外,有一个无需指定具体文件,直接分析全部编译捕获到的文件:
cov-run-desktop --dir idir --reference-snapshot latest --set-new-defect-owner false --whole-program --analyze-captured-source
但是,如果cov-build捕捉到的文件特别多,超过千个,不能使用此方式!会报错!只能指定文件方式扫描!

2.5 :输出成html报告

因本地检查工具不能把结果推送到服务器上进行查看, 如果不习惯窗口的文件检查结果显示,可以运行以下命令生成html文件查看:
cov-format-errors --dir idir --html-output outdir
结果会生成到outdir目录下,查看index.html文件

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起搞IT吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值