codechecker是一款开源的静态检查工具。
这里是github地址:https://github.com/Ericsson/codechecker
这是一款基于Clang Static Analyzer 和 Clang Tidy的工具。
codechecker的工作流程
开发提交代码后,在命令行里面运行codechecker工具:
大概命令分为两部分:
1. codechecker logging部分,就是记录哪些文件参与了编译。
CodeChecker log -b "make 命令" -o record.json
这个过程生成的将会是一个json,是一个包含了多个字典的列表,其实就是多个文件的编译记录。如下:
[
{ "directory": "文件路径",
"command": “编译命令”,
"file": "文件名"
},
...
]
2. codechecker analyze部分,就是根据前面生成的json文件进行分析。
这里我们使用的report-hash是context-free-v2的,--skip ./skipfiles 这个也是可选的,可以让你跳过一些文件的检查,-j 指定了分析时占用的系统核数,record.json就是我们前面生成的json文件,-o指定了分析生成的report目录。可以用绝对路径,此处使用的是相对路径。
CodeChecker analyze --report-hash context-free-v2 --skip ./skipfiles -j $(nproc) \
record.json -o ./reports
3. codechecker parse 部分,这个可以在本地直接生成所有defects的报告。
网页的:CodeChecker parse -e html ./reports -o report.html
或者
文本的:CodeChecker parse ./reports >> report.txt
4. codechecker store部分
如果搭建了codechecker server的话,可以将步骤2生成的report 保存到server上,可以更好的可视化。codechecker的可视化做的还是非常不错的。
codechecker_url 就是server的url, report_name就是在server上的report显示的名字。--tag可以加上代码标签。
CodeChecker store ./reports --url $codechecker_url --name $report_name --tag $short_sha1
这些都是可以写到配置文件里的。
codechecker版本
目前codechecker已经开发到6.16.0版本:https://github.com/Ericsson/codechecker/releases/
这个release网页可以查看所有的发布的版本的新feature和修复的bugs。
CodeChecker有详细的帮助文档,都在docs下面。
codechecker加速方法
首先我们要分析下codechecker的耗时点,主要在build和analyze两部分耗时。
build部分,我们可以使用dry-run的方式来跑。
make all -Bnwk
make的这几个参数可以自行查阅,-B代表每次都全部重新编译所有的target,-n是不进行真实的编译,但是会把编译命令打出来,-w是输出运行makefile之前和之后的信息,对于跟踪嵌套式调用时很有用,-k是keep-going, 出错不停止。
analyze部分,我比较推荐用skipfile
可以参考codechecker网站文档:
https://github.com/Ericsson/codechecker/blob/master/docs/analyzer/user_guide.md
里面有介绍如何创建skipfile。
如果你只想检查某些文件,可以创建这样的skipfile,其中*代表相对路径。+代表你想检查某个文件,-代表你想跳过检查的文件,codechecker会从上往下匹配。
+*/my_project/my_lib_to_skip/important_file.cpp
-*
创建完skipfile再用带skipfile的命令运行就可以啦。
CodeChecker analyze --report-hash context-free-v2 --skip ./skipfiles -j $(nproc) \
record.json -o ./reports