Skip to main content

NaiveSystems™️ Analyze 试用指南 (单机版)

推荐系统配置

设备推荐配置
CPUIntel 或 AMD 的 64 位 x86 处理器,具有 4 核 8 线程(或以上)

根据实际待检查的代码行数等,可能需要更高配置以获得更好效果。

如果使用 Apple M1 系列芯片,性能可能会有一定下降。
内存16GB DDR4 或以上

如果 CPU 支持更高核心数/线程数,NaiveSystems™️ Analyze 可能会自动扩展到
全部 CPU 资源,从而需要更多内存。建议考虑操作系统及其他程序在日常
负载下的内存占用,并为每个 CPU 核心预留至少 2GB 空闲内存。
硬盘需要 20GB 或以上的空闲硬盘空间,推荐使用 SSD

NaiveSystems™️ Analyze 的安装过程会占用大约 10GB 的硬盘空间。根据实际
待检查的代码行数等,运行过程中可能需要 10GB 甚至更多的硬盘空间。
网络NaiveSystems™️ Analyze 的安装过程需要通过网络下载大约 10GB 的内容,在
100Mbps (大约 12MB/s) 网络带宽下,下载过程大约需要 15 分钟。

使用更高速的网络可以有效减少下载所需时间,但受限于我们服务器负载等
条件的限制,实际速度可能无法达到更高的水平。
操作系统推荐使用较新的基于 Linux 的发行版,比如 Fedora 35 或者 Ubuntu 20.04

理论上,所有能够支持运行容器的操作系统都可以,包括部分版本的
Windows 及 macOS 等。
软件推荐使用4.1.0及以上的podman版本。

开始前的准备

如果你使用 Linux 系统,请先安装 Podman:https://podman.io/getting-started/installation

如果你使用 macOS 或者 Windows 系统,除了 Podman,也可以选择使用 Docker:

注意:你可能需要从 Docker Inc. 或其他公司购买使用 Docker 的商业许可。我们不对 Docker 本身提供技术支持服务。如果你选择使用 Docker 运行我们的产品,并希望获得与此相关的技术支持服务,请联系我们的销售人员获取报价。如有可能,我们推荐使用 Podman 运行。

下述指南内容可能需要使用 git 命令。如果你使用 Linux 或 macOS 系统,可以使用常见的包管理器安装它。如果你使用 Windows 系统,可以参考 https://git-scm.com/download/win 或者其他互联网上的内容,提前安装好 git 相关的程序。

第 1 步:准备待检查的代码

为了快速展示 NaiveSystems™ Analyze 的功能,我们准备了一个代码仓库,里面包含一些简单的演示程序。你可以复制然后运行命令:

git clone https://github.com/naivesystems/analyze-demo.git
cd analyze-demo
mkdir output

注意:如果你使用 Windows 系统,请使用 PowerShell 命令行。

以下展示了在 Linux 上运行上述命令的情况:

$ git clone https://github.com/naivesystems/analyze-demo.git
Cloning into 'analyze-demo'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 12 (delta 0), reused 12 (delta 0), pack-reused 0
Receiving objects: 100% (12/12), done.
$ cd analyze-demo
$ mkdir output

第 2 步:运行静态检查工具

使用 Linux 系统

如果你使用 Linux 系统,运行:

podman run --rm -v $PWD:/src:O -v $PWD/output:/output:Z -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/src/run_analyzer

注意:由于排版限制,该命令使用反斜线 \ 折行,实际操作中可以把多行合并(去掉反斜线)后运行。具体请参考你所使用的命令行或终端的帮助文档。

首次运行该命令时,Podman 会通过网络下载 NaiveSystems™ Analyze 的容器镜像。

命令中的 2022.1.0.515003 是 NaiveSystems™ Analyze 的版本号。如果要使用其他版本,请注意替换为相应的版本号。

命令中的 /src/run_analyzer 部分仅针对我们提供的演示程序里的 Makefile 构建方式。如果要应用于其他使用 Makefile 的项目,可以参考 run_analyzer 进行适配。如果要分析 Keil MDK 或者 CMake 项目,请参考其他章节里的内容。

如果希望跳过对某些文件夹的检查,需要在调用 misra_analyzer 时增加 -ignore_dir 参数。例如跳过对项目根目录下 third_party 文件夹的检查:

/opt/naivesystems/misra_analyzer -show_results \
-ignore_dir="/src/third_party/**/*"

如果要跳过对多个文件夹的检查,可以多次使用 -ignore_dir 参数,例如:

/opt/naivesystems/misra_analyzer -show_results \
-ignore_dir="/src/third_party/**/*" \
-ignore_dir="/src/test/**/*"

使用 Windows 系统

如果你使用 Windows 系统和 Docker,在 PowerShell 中运行:

docker run --rm -v ${pwd}:/src -v ${pwd}/output:/output -w /src/ `
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.1.0.515003 `
/src/run_analyzer

如果你使用 Windows 系统和 Podman,在 PowerShell 中运行:

podman run --rm -v ${pwd}:/src -v ${pwd}/output:/output -w /src/ `
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 `
/src/run_analyzer

如何在 Windows 系统上安装与配置 Podman,请参考《如何用 Podman 替代 Docker》

使用 macOS 系统

如果你使用 macOS 系统(非 Apple M1 系列芯片)和 Docker,运行:

docker run --rm -v $(pwd):/src -v $(pwd)/output:/output -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/src/run_analyzer

如果你使用 macOS 系统(使用 Apple M1 系列芯片)和 Docker,运行:

docker run --rm --platform linux/amd64 \
-v $(pwd):/src -v $(pwd)/output:/output -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.1.0.515003 \
/src/run_analyzer

其他情况

当运行方式发生变化时,本文档可能无法及时更新。如果你遇到问题,可以访问我们的 GitHub Wiki 来获取最新说明:

第 3 步:查看检查结果

在命令行或终端查看

使用上述演示程序时,NaiveSystems™ Analyze 会直接在屏幕上输出结果。

以下展示了在 Linux 上运行上述命令的情况:

$ podman run -v $PWD:/src:O -v $PWD/output:/output:Z -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/src/run_analyzer
demo.c:3: [C0513][misra-c2012-8.2]: 函数类型必须为带有命名形参的原型形式
unnamed parameter.
function name: func_param_without_name

demo.c:7: [C1109][misra-c2012-5.1]: 不得使用重名的外部标识符
Variable: engine_exhaust_gas_temperature_scaled

demo.c:8: [C1109][misra-c2012-5.1]: 不得使用重名的外部标识符
Variable: engine_exhaust_gas_temp_raw

demo.c:9: [C1109][misra-c2012-5.1]: 不得使用重名的外部标识符
Variable: engine_exhaust_gas_temp_scaled

demo.c:11: [C1203][misra-c2012-9.3]: 不得对数组进行部分初始化

demo.c:14: [C0904][misra-c2012-7.1]: 不得使用八进制常量

demo.c:24: [C0301][misra-c2012-19.2]: 不应使用关键字union

demo.c:27: [C0301][misra-c2012-19.2]: 不应使用关键字union

demo.c:28: [C0302][misra-c2012-19.1]: 不得将对象赋值或复制给与其重叠的对象

在 Visual Studio Code 中查看

在运行完上述命令后,NaiveSystems™ Analyze 会将检查结果输出到 output/results 文件中。使用我们发布的 Visual Studio Code 插件,可以更方便地查看和定位错误。

注意:如果使用 0.0.2 或以上版本的插件,并且检查结果输出在 output/results 文件中,需要将分析结果复制到 output/results.nsa_results,否则插件将无法找到分析结果文件。我们会在以后的 NaiveSystems™ Analyze 版本中将检查结果自动保存到以 .nsa_results 结尾的文件中。

在线安装 VS Code 插件

访问 https://marketplace.visualstudio.com/items?itemName=naivesystems.analyze 可以下载该插件。或者按下图所示,在 Visual Studio Code 中搜索 naivesystems.analyze 并选择安装。

请耐心等待安装完成。如果遇到困难,请联系我们。

安装后 Visual Studio Code 会提示如下:

点击 Reload Now 按钮,重新加载 Visual Studio Code,然后打开 analyze-demo 目录。

注意:不要打开单个文件,而是必须打开整个目录。

离线安装 VS Code 插件

如果无法正常在线安装插件,也可以选择通过 VSIX 文件的方式进行安装:

  1. https://marketplace.visualstudio.com/items?itemName=naivesystems.analyze 页面右侧选择 Download Extension 下载 .vsix 文件

  2. 在 Visual Studio Code 的扩展页点击下图方框所示部分,选择:从 VSIX 安装...

  1. 选择第一步下载的 .vsix 文件进行安装
查看文件中的错误

双击左侧 demo.c 文件,打开后如上图所示,NaiveSystems™ Analyze 会将检查结果直接标记在编辑器中。

也可以在问题栏中找到:

鼠标悬停在有标记的行上,可以看到错误代码和详细的错误信息,点击带有链接的错误代码可以直接跳转到对应规则的文档页面:

除了查看单个文件内的检查结果,还可以查看所有检查结果的总览:

在 vscode.dev 中查看

在线安装 VS Code 插件

使用浏览器访问 https://vscode.dev/

如下图所示,在 Extensions 中搜索 naivesystems.analyze 并选择安装。

安装完成后打开 analyze-demo 目录。

注意:不要打开单个文件,而是必须打开整个目录。

查看文件中的错误

在 vscode.dev 中查看错误的方式与 Visual Studio Code 相同,具体可参考上文。

在线查看规则的详细文档

无论你是在命令行或终端还是 Visual Studio Code 插件里查看结果,检查结果的开头都会有形如 C0123 的错误代码(一般被英文方括号 [ ] 所包围)。使用该错误代码,可以在我们为客户提供的在线文档库里进行搜索,找到关于该条规则的详细说明。

使用浏览器访问 https://docs.naivesystems.com/ 并输入错误代码:

如果尚未登录,系统会提示使用微信扫码登录:

登录后可以看到文档全文。

注意:文档网站 https://docs.naivesystems.com/ 尚未完全开放使用,在试用期间,你可能会被展示一个与上述截图不同版本的网站,该版本会要求先进行微信扫码,此后可以进行搜索和文档的查看。在此过程中可能缺乏友好的提示信息。

有意违规

如果在检查结果中存在有意违规的代码,可以使用 VS Code 插件进行手动标记。在报错位置选择快速修复或者点击灯泡图标,选择下图所示选项:

再次扫描时将不会报出相同错误。在 .naivesystems/suppression 文件夹生成的 .nsa_suppression 文件也可用于其他项目。

汇报问题

如果你在试用期间遇到任何问题,请微信联系我们的工作人员。如有需要,我们会引导你在指定的缺陷管理系统中提交问题的详细说明,从而可以让我们的研发部门进行处理。

如何检查 Keil MDK 项目

注意:需要使用 2022.1.0.515003 或更高版本。

第 1 步:准备待检查的代码

保证项目目录下存在 .uvprojx 格式文件,或者运行以下命令来使用演示仓库:

git clone https://github.com/SeerLikeJazz/LVGL-STM32F429I-DISC1
cd LVGL-STM32F429I-DISC1/firmware
mkdir output

第 2 步:准备待检查的规则

  1. https://docs.naivesystems.com/analyze/misrac2012 查看技术规格书了解所支持的规则列表

  2. 在firmware文件夹下新建.naivesystem文件夹,然后在.naivesystem文件夹下新建check_rules

  3. check_rules 文件中每一行代表要检查的一条规则,格式为 misra_c_2012/TYPE_X_Y {...},其中 TYPE_X_Y 与规则编码相对应,例如 Rule 5.1 在文件中写为 misra_c_2012/rule_5_1。 {...} 里为每条规则的设置

check_rules 可以通过 https://rules.naivesystems.com/ 进行设置,具体可参考《规则设置工具功能指南》

第 3 步:运行静态检查工具

以 Windows 系统和 Docker 为例,在 PowerShell 中运行:

docker run --rm -v ${pwd}:/src -v ${pwd}/.naivesystems:/config `
-v ${pwd}/output:/output -w /src/ `
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.1.0.515003 `
/opt/naivesystems/misra_analyzer --show_results --project_type=keil

以 Windows 系统和 Podman 为例,在 PowerShell 中运行:

podman run --rm -v ${pwd}:/src -v ${pwd}/.naivesystems:/config `
-v ${pwd}/output:/output -w /src/ `
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 `
/opt/naivesystems/misra_analyzer --show_results --project_type=keil

以 Linux 系统和 Podman 为例,运行:

podman run --rm -v $PWD:/src:O -v $PWD/.naivesystems:/config:Z \
-v $PWD/output:/output:Z -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/opt/naivesystems/misra_analyzer --show_results --project_type=keil

如何检查 CMake 项目

注意:需要使用 2022.1.0.515003 或更高版本。

第 1 步:准备待检查的代码

保证项目根目录下存在 CMakeLists.txt 文件,或者直接使用我们上文提到的演示代码:

git clone https://github.com/naivesystems/analyze-demo.git
cd analyze-demo
mkdir output

第 2 步:准备待检查的规则

  1. https://docs.naivesystems.com/analyze/misrac2012 查看技术规格书了解所支持的规则列表

  2. 在 .naivesystems 文件夹下新建 check_rules 文件

  3. check_rules 文件中每一行代表要检查的一条规则,格式为 misra_c_2012/TYPE_X_Y,其中 TYPE_X_Y 与规则编码相对应,例如 Rule 5.1 在文件中写为 misra_c_2012/rule_5_1

check_rules 可以通过 https://rules.naivesystems.com/ 进行设置,具体可参考《规则设置工具功能指南》

第 3 步:运行静态检查工具

以 Linux 系统为例(其他系统可参考其他章节中的说明),运行:

podman run --rm -v $PWD:/src:O -v $PWD/.naivesystems:/config:Z \
-v $PWD/output:/output:Z -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/opt/naivesystems/misra_analyzer --show_results --project_type=cmake

如果使用我们的演示代码,可以直接运行:

podman run --rm -v $PWD:/src:O -v $PWD/output:/output:Z -w /src/ \
ccr.ccs.tencentyun.com/naivesystems/analyze:2022.3.0.0 \
/src/run_analyzer_cmake

常见问题

1. 提示 incorrect volume format

请检查 -v 之后的路径格式是否正确,正确格式应为 本地目录:容器目录[:选项代码],其中选项代码为 podman 可选,docker 无需选项代码。

2. 如何删除旧版本的镜像

使用 docker images 命令查看旧版本镜像的 image id:

使用 docker rmi 命令删除旧版本的镜像,以上图为例,运行:

docker rmi e5b4e2ccea14

如果遇到删除失败的情况,请尝试使用 -f 选项(但会终止所有正在使用该镜像运行的容器):

docker rmi -f e5b4e2ccea14

podman 用户也可以参照以上方法删除不需要的镜像。

3. 检查执行意外中止的处理方法

如果遇到检查卡死使用 Ctrl + C 退出检查或者其他检查执行意外中止的情况:

使用 docker ps 命令查看旧版本镜像的 names(下图中的 lucid_lederberg):

使用以下命令删除意外退出的检查容器:

docker rm -f lucid_lederberg

podman 用户也可以参考以上方法处理。

4. 提示 error parsing host environment variables

出现 error parsing host environment variables 提示,可能环境变量名中存在空格,可以暂时删除带有空格的环境变量,拉取容器成功后重新添加进环境变量即可。

5. 运行 podman 时提示 Permission denied

在运行 podman 命令时添加 --privileged 参数即可。

6. 在 Linux 操作系统中运行 podman 时提示 invalid mount option

podman 版本过老导致,建议升级到 4.1 或以上。