通过脚本使用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

从1.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.使用Cppcheck做静态测试的两个脚本

通过脚本来使用cppcheck做静态测试,比GUI方便很多。

我们需要两个脚本。

  • (1) ListGen.bat:遍历指定目录下的.c文件生成文件列表文本文件。
  • (2) CppcheckReport.bat:读取文件列表文件中的.c文件对其做静态测试,把测试结果输出为.xml文件,然后通过cppcheck-htmlreport这个python脚本从.xml文件转换得到html报告。

ListGen.bat内容:

@echo off

REM 遍历目录名
set DIRECTORY_NAME=linux-4.10.7

echo Get file name for .c in the directory: %DIRECTORY_NAME%

REM 获取当前日期和时间
set DATETIME=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

REM 构建txt文本文件的文件名
set SRC_FILELIST=%DIRECTORY_NAME%_filelist_%DATETIME%.txt

REM 显示文件名
echo The file list name is: %SRC_FILELIST%

echo Waiting...

REM 递归地遍历目录下所有的.c文件,把文件名写入txt文本文件
for /r %DIRECTORY_NAME% %%i in (*.c) do @echo %%i >> %SRC_FILELIST%

pause

实例中我们配置set DIRECTORY_NAME=linux-4.10.7。你可以根据需求修改遍历的目录名。执行此脚本结束后,会生成一个以txt文件。然后,请修改此txt文件,从中删除不需要做静态测试的文件,只保留需要做静态测试的文件。最后,请把这个文件命名为“CppcheckReport.bat”脚本中与“set SRC_FILELIST=“.\linux-4.10.7_filelist.txt””一样的名字。

CppcheckReport.bat内容:

@echo off
setlocal

REM 获取当前日期和时间
set DATETIME=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%

REM 设置 SRC_CC_REPORT 目录路径
set SRC_CC_REPORT="SRC_CC_REPORT"

REM 检查 SRC_CC_REPORT 目录是否存在,如果不存在则创建
if not exist %SRC_CC_REPORT% (
  mkdir %SRC_CC_REPORT%
)

REM 在 SRC_CC_REPORT 目录下创建 REPORT_YYYYMMDD_HHMMSS 子目录
set REPORT_SUB_DIR=%SRC_CC_REPORT%\RPT_%DATETIME%
mkdir %REPORT_SUB_DIR%

set CPPCHECK_PATH="C:\Program Files\Cppcheck\cppcheck.exe"
set ADDON_PATH="C:\opt\cppcheck\configurations\misra.json"

set SRC_FILELIST=".\linux-4.10.7_filelist.txt"

set OUTPUT_XML="static_analysis_output.xml"
set CPPCHECK_HTMLREPORT_PATH="C:\opt\cppcheck\htmlreport\cppcheck-htmlreport"
set CPPCHECK_HTMLREPORT_TITLE="My Project"

%CPPCHECK_PATH% --file-list=%SRC_FILELIST% --xml --platform=win64 --enable=all --addon=%ADDON_PATH% 2>%OUTPUT_XML%

python %CPPCHECK_HTMLREPORT_PATH% --file=%OUTPUT_XML% --title=%CPPCHECK_HTMLREPORT_TITLE% --report-dir=%REPORT_SUB_DIR% --source-dir=.

REM 删除xml文件
del %OUTPUT_XML%

pause
endlocal

此脚本会使用cppcheck对“set SRC_FILELIST=“.\linux-4.10.7_filelist.txt””文件中的每个文件做静态测试,并将测试结果写到一个xml文件。静态测试结束后,会调用python脚本工具cppcheck-htmlreport把xml转换为html报告。

注:cppcheck-htmlreport工具在cppcheck源代码包里可以找到。

4.参考

(1)Code check and html-report with cppcheck.(链接https://dunterov.github.io/cppcheck/)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Windows环境中配置Cppcheck,您需要按照以下步骤进行操作: 1. 首先,下载CppcheckWindows安装程序或预编译二进制文件。您可以从Cppcheck的官方网站(https://github.com/danmar/cppcheck)上获得可用的安装文件。 2. 下载完成后,双击运行安装程序,按照提示进行安装。在安装过程中,请确保选择将Cppcheck添加到系统的环境变量中。 3. 安装完成后,打开命令提示符或 Power Shell。 4. 输入"cppcheck"命令,如果您已成功配置了环境变量,将显示Cppcheck的版本和用法信息。 5. 如果输入"cppcheck"时未找到该命令,您需要手动将Cppcheck的安装目录添加到系统的环境变量中。 6. 在命令提示符中输入"sysdm.cpl"命令,打开“系统属性”窗口。 7. 在窗口的顶部选项卡中,点击“高级”选项卡,并点击“环境变量”按钮。 8. 在“环境变量”窗口中,找到系统变量列表中的“Path”变量,并点击“编辑”按钮。 9. 在“变量值”字段中,添加Cppcheck的安装目录的路径,例如:“C:\Program Files\Cppcheck”。 10. 点击“确定”按钮保存设置并关闭所有打开的窗口。 11. 重新打开命令提示符或 Power Shell,再次输入"cppcheck"命令,如果一切正常,将显示Cppcheck的版本和用法信息。 通过以上步骤,您可以在Windows环境中成功配置Cppcheck,并可在命令提示符或 Power Shell 中使用该工具对C/C++代码进行静态分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值