C++代码审查工具Cppcheck和TscanCode

简介: 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 - 博客园


C/C++代码静态分析工具调研


研发工具,你用对了吗?


Windows下 Cppcheck 的使用教程_hellokandy的博客-CSDN博客_cppcheck


C/C++代码静态分析工具调研 - 简书


C++代码质量扫描主流工具深度比较 - 51Testing软件测试网-中国软件测试人的精神家园


C++代码静态检测 - 威海云博客 - 博客园

相关文章
|
4月前
|
编译器 vr&ar C语言
高效c/c++日志工具zlog使用介绍
高效c/c++日志工具zlog使用介绍
361 2
|
4月前
|
存储 C++
基于C++的简易文件压缩与解压缩工具设计与实现
基于C++的简易文件压缩与解压缩工具设计与实现
134 3
|
4月前
|
监控 算法 Linux
【C/C++ 实用工具】CPU使用率监控工具对比
【C/C++ 实用工具】CPU使用率监控工具对比
114 0
|
4月前
|
Java Linux C++
性能工具之 C/C++ 分析工具 valgrind
【5月更文挑战第26天】性能工具之 C/C++ 分析工具 valgrind
69 2
性能工具之 C/C++ 分析工具 valgrind
|
4月前
|
IDE Linux 开发工具
一网打尽:C++远程调试工具和策略全指南
一网打尽:C++远程调试工具和策略全指南
124 2
|
2月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
4月前
|
C++
c++日志工具spdLog
c++日志工具spdLog
29 1
|
4月前
|
安全 编译器 C语言
C++:编程语言中的强大工具
C++:编程语言中的强大工具
30 0
|
4月前
|
算法 搜索推荐 程序员
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
C++标准库算法指南:从线性到复杂度 — 选择最佳工具
99 0
|
4月前
|
运维 监控 算法
【C/C++ 实用工具】网络监控工具一览
【C/C++ 实用工具】网络监控工具一览
66 0