CodeChecker:Clang-Tidy与Clang Static Analyzer分析结果可视化
简介
CodeChecker是一个基于LLVM/Clang工具链的静态分析组件,用于替代Linux/MacOS开发环境中的scan-build工具。本文简单介绍其使用方法和使用命令。
安装
MaxOS
1 | # Download and install dependencies. |
在make package
时,会报出各种错误,这是因为缺少python依赖包:
- sqlalchemy
- pysocks
- portalocker
- alembic
- pg8000
- psycopg2-binary
- psutil
- scan-build
- thrift
- codechecker_api
- codechecker_api_shared
使用pip进行安装:
1 | $ pip install package_name |
使用
详细介绍见CodeChecker使用介绍。
生成编译数据库文件
创建一个目录,用来进行编译(我们这里用tmux
目录):
1 | cd tmux |
清理之前的编译结果:
1 | make clean |
通过拦截记录make
的执行,生成编译数据库文件:
1 | CodeChecker log -b "make" -o compilation.json |
检测生成的compilation.json
。如果包含gcc
的编译过程,那么这个编译数据库文件就是正常的。
1 | vim ./compilation.json |
如果编译数据库文件是空的,有以下原因:
- Make sure that your build system actually invoked the compiler (e.g. gcc, g++). In case your software was built once (and the binaries are already generated), the compiler will not be invoked. In this case do a build cleanup (e.g. make clean) and retry to log your build.
- Make sure that the
CC_LOGGER_GCC_LIKE
environment variable is set correctly and contains your compilers. For detailed description see the user guide. - MacOS users need intercept-build to be available on the system, and in most cases, System Integrity Protection needs to be turned off. See the
README
for details. It is possible that the intercept-build can not log the compiler calls without turning off System Integrity Protection (SIP). intercept build can automatically detect if SIP is turned off.
根据编译数据库文件进行分析
生成了编译数据库文件(compilation.json
)后,可以开始分析对应工程。
开始分析:
1 | $ CodeChecker analyze compilation.json -o ./reports |
生成.plist
分析结果:
1 | $ CodeChecker parse ./reports |
简洁操作
我们也可以将生成编译数据库文件
和根据编译数据库文件进行分析
两步整合成一步:
1 | cd tmux |
也可以多线程运行codechecker:
1 | CodeChecker check -j22 -b "make clean;make -j22" -o ./reports |
查看错误报告
命令行查看
我们可以通过命令行打印具体的分析结果(包括控制流):
1 | CodeChecker parse --print-steps ./reports |
HTML查看
我们也可以生成HTML格式的错误报告:
1 | CodeChecker parse ./reports -e html -o ./reports_html |
./reports_html
目录中将生成index.html
,是所有错误报告的目录文件,可以通过它查看其他错误报告。
整合分析结果
可以将分析结果存入一个数据库,然后通过一个网页来查看所有分析结果。
- 在端口8555开启CodeChecker本地服务器(使用了SQLite DB,不推荐多用户使用),创建一个工作目录,然后在这个工作目录中存储数据。
1 | mkdir ./ws |
默认情况下,将创建一个Default
项目,来存储分析结果。
- 通过
tmux
将所有结果存储在服务器中(在Default
项目中):
1 | CodeChecker store ./reports --name tmux --url http://localhost:8555/Default |
PRODUCT_URL
的格式为[http[s]://]host:port/ProductEndpoint
。要注意的是如果我们使用安全模式(使用SSL)开启这个服务,需要使用https
协议前缀(默认协议为http
)。用户指南中对PRODUCT_URL
进行了更为详细的介绍。
- 通过网址
http://localhost:8555/Default
查看所有的分析结果。
- 本文链接:http://katherineleeyq.cn/2020/05/02/CodeChecker:Clang-Tidy与Clang-Static-Analyzer分析结果可视化/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!