C++代码审查工具Cppcheck和TscanCode
Posted 特立独行的猫a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++代码审查工具Cppcheck和TscanCode相关的知识,希望对你有一定的参考价值。
cppcheck简介
cppcheck 是一个静态代码检查工具,支持c、c++ 代码。作为编译器的一种补充检查,cppcheck对源代码执行严格的逻辑检查。
助力开发与测试工程师从代码层面挖掘问题,聚焦于包括逻辑错误、可疑的代码、运算错误、空指针、越界错误、内存泄漏这6个类,52个小类的代码异常。
相比其他的静态检查工具,cppcheck具有简单易上手、执行快、开源等优点。
执行的检查包括:
1. 自动变量检查
2. 数组的边界检查
3. class类检查
4. 过期的函数,废弃函数调用检查
5. 异常内存使用,释放检查
6. 内存泄漏检查,主要是通过内存引用指针
7. 操作系统资源释放检查,中断,文件描述符等
8. 异常STL 函数使用检查
9. 代码格式错误,以及性能因素检查
默认用法
$cppcheck --enable=all test.cpp
$cppcheck --enable=all ./src
使用选项–output-file将结果存储在report.txt中。
也可以用输出重定向:
$cppcheck --enable=all test.cpp 2> report.txt
cppcheck安装
官网地址:Cppcheck - A tool for static C/C++ code analysis
安装十分简便,只需在官网下载最新的可执行安装包(目前为cppcheck-2.7-x64-Setup.msi
)跟着向导「下一步」即可。
运行结果对94个例子的分析十分到位,只不过底侧的代码预览对中文注释似乎不太友好。
除了GUI,Cppcheck还支持与多种IDE(如VS、Eclipse、QtCreator等)、版本管理系统(如Tortoise SVN、Git)集成使用。
可对每次分析进行配置甚至自定义规则,并作为项目文件进行保存或重载。
分析的结果报告可保存为格式化纯文本或XML,并可借助Python pygments将XML生成为html。
两种工具对比
检测能力:Cppcheck > TscanCode
易用性:TscanCode > Cppcheck
不是说cppCheck就绝对占优,它在某些情况下可能存在误报。
下面再介绍款腾讯开源的TscanCode。
TscanCode介绍
TscanCode 是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。TScanCode 比较适用于游戏开发代码扫描,有着不错的准确率和效率。
TscanCode 主要能够发现的问题如下:
1、自动变量检查: 返回自动变量(局部变量)指针;
2、越界检查:数组越界返回自动变量(局部变量)指针;
3、类检查:构造函数初始化;
4、内存泄露检查;
5、空指针检查;
6、废弃函数检查;
主流代码审查工具
C++静态代码分析工具(cppcheck、coverity、clang、pclint)。
其性能测试可以见:https://blog.csdn.net/wetest_tencent/article/details/51516347。
TScanCode安装
TscanCode 已经在 Github 上开源。
代码仓库为:GitHub - Tencent/TscanCode: A static code analyzer for C++, C#, Lua, 我们可以自己下载下来编译,也可以使用腾讯预编译好的可执行文件(代码仓库的 release 目录)。
release ->编译后的二进制文件,分别有Linux、Mac、Windows平台
samples ->测试的代码样例,分别有C++、C#、Lua语言
trunk ->TscanCode源代码
windows平台下:
注(windows平台下,截至目前gtihub的release目录里去掉了原windows的安装包,要想使用可以网上找下载安装TscanCodeV2.14.24.windows.exe。后面评论区有下载链接)
扫描项目,导入即可,即可以导入一个文件夹,也可以导入单个文件。
对于扫描后的结果,可以保存为 xml 配置文件,方便下一次直接在主界上直接使用。(打开->结果查看,选中该文件即可。)
还可以在设置中选择扫描规则,每个规则都有对应的代码实例可供参考。
linux平台下:
第一种:
$ git clone https://github.com/Tencent/TscanCode.git
$ cd TscanCode/release/linux/
$ unzip TscanCodeV2.14.24.linux.zip
$ cd TscanCodeV2.14.24.linux/TscanCodeV2.14.2395.linux
$ chmod a+x tscancode
$ echo "PATH=$PATH:$(pwd)" >> ~/.bashrc
$ source ~/.bashrc
第二种,建议使用:
cd trunk/
make
修改cfg/cfg.xml #cfg.xml 配置不当,可能导致检测结果为空,建议value="0"的再开启一些
./tscancode --xml --enable=all -q /home/yang/test/cpp/ >scan_result.xml 2>&1
扫描规则与配置
代码安全静态扫描工具TscanCode支持多平台运行,包括Linux、Windows版本。
在Linux下可通过cfg/cfg.xml对扫描的规则进行配置,
其中通过设置value=0则禁用,value=1则启用。
根据需要定制扫描规则,编辑规则配置文件cfg/cfg.xml,或直接使用默认的扫描规则。
将源代码放到指定路径下$SRC_CODE(路径中不能包含root文件夹,TscanCode特殊性)。
如,export SRC_CODE=~/myprj/mysource/
执行代码扫描
./tscancode --xml --enable=all -q $SRC_CODE >scan_result.xml 2>&1
TscanCode会将结果按照固定的XML格式写入文件中。
选择Excel工具打开XML报告(为了处理更直观),在左侧插入一列处理情况。
开发人员根据报告对代码上下文进行分析,判断是否为工具误报。
对于确认为问题的代码,由开发人员处理后重新进行代码安全静态扫描,直到问题关闭。
其他的一些工具
Valgrind是开放源代码(GPL V2)的仿真调试工具的集合,支持Linux操作系统。它的功能同样强大:
1)Memcheck:重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等;
2)Callgrind:检查程序中函数调用过程中出现的问题,也可以用于性能调优;
3)Cachegrind:检查程序中缓存使用出现的问题;
4)Helgrind:检查多线程程序中出现的竞争问题;
5)Massif:检查程序中堆栈使用中出现的问题;
6)Extension:编写特定的内存调试工具。
推荐几个常用的在线c++代码测试网站
OnlineGDB
Url:https://www.onlinegdb.com/
C++ ShellC++ Shell
Url:http://cpp.sh/
Online PHP/Java/C++... editor and compiler | paiza.IO
引用
静态代码扫描工具汇总_while_false_的博客-CSDN博客_静态代码扫描工具
TscanCode C/C++静态分析开源分析工具安装与使用_lwblovezj的博客-CSDN博客_tscancode
SPrinter:一个基于Clang-Tidy的C++程序智能指针错误检查工具_ithiker的博客-CSDN博客
C++代码自动检测工具clang-format和clang-tidy_长星照耀十三州府_的博客-CSDN博客
TscanCode代码扫描工具_code_peak的博客-CSDN博客_tscancode
代码扫描工具TScanCode - yusq77 - 博客园
Windows下 Cppcheck 的使用教程_hellokandy的博客-CSDN博客_cppcheck
C++代码质量扫描主流工具深度比较 - 51Testing软件测试网-中国软件测试人的精神家园
以上是关于C++代码审查工具Cppcheck和TscanCode的主要内容,如果未能解决你的问题,请参考以下文章
静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]
如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?