一、简介
TscanCode支持以下类型规则扫描:
- 空指针检查,包含可疑的空指针;
- 数据越界;
- 内存泄漏,分配和释放不匹配;
- 逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查;
- 可疑代码检查,if判断中含有可疑的=号;
- 运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。
二、安装
(linux环境)进入代码仓库:/Tencent/TscanCode, 克隆到本地(或者到码云镜像/tyq123/TscanCode)
$ git clone /Tencent/TscanCode
1、直接使用编译好的执行文件,在release目录下:
$ cd ./TscanCode-t/release/linux
$ cd ./TscanCodeV2.14./TscanCodeV2.14.
$ chmod a+x tscancode
2、源码编译
$ cd trunk/
$ make
修改cfg/ # 配置不当,可能导致检测结果为空,建议value="0"的再开启一些
代码安全静态扫描工具TscanCode支持多平台运行,包括Linux、Windows和mac版本,在Linux下可通过cfg/对扫描的规则进行配置,
其中通过设置value=0则禁用,value=1则启用。windows下是GUI,交互比较友好。
三、扫描过程
$ ./tscancode --xml --enable=all -q ${CODE_DIR} >scan_result.xml 2>&1
执行./tscancode 或 ./tscancode -h 可获得帮助信息
一些参数:
--enable=<id> all:检查所有 warning:检查warning级别的项目 unusedFunction:检查未使用函数 等
-I <dir> 指示头文件目录
-j <jobs> [jobs]个线程同时扫描
-q 静默模式
--xml 输出xml格式的扫描报告
示例:
$ export CODE_DIR=/data/your/code/dir/
$ ./tscancode --xml --enable=all -I $CODE_DIR/include $CODE_DIR/*.cpp 2>
处理过程:
分析过程:
检查过程:
普通文本格式扫描结果:
查看下具体代码:
上图的给指针pp直接置空有问题,内存泄漏了。然后关闭释放资源pp也有问题,因为pp为空指针了。
上图411行,对data2这个指针求长度,被认为是异常的,应该是求变量的长度。
等等...
一般开发时使用可能只需要知道行号即可,也可以用xml格式输出,查看问题代码上下文。
四、规则扩展
开源代码,可根据情况修改。
五、其他代码检查工具调研
1、cppcheck
Cppcheck是 用于C / C ++代码的静态分析工具。它提供独特的代码分析以检测错误,并专注于检测未定义的行为和危险的代码构造。目标是极少出现误报。
也有windows和linux版本,windows版为图形界面。
可通过sourceforge下载安装:wget /project/cppcheck/cppcheck/1.75/cppcheck-1.
编译同样很简单:$ make
使用和tscancode很相似:$ ./cppcheck --enable=all /home/your/code/dir/*.cpp
但是得出的结论是,准确率没有比tscancode高,而且会有较多误报:不同函数里定义的同名变量,被认为是重复定义。
还有其他几款代码检查工具:pclint、coverity、clang等
以下来自网上技术文章中的对比信息:
/bandaoyu/article/details/108114456
准确率规则也分空指针、越界、变量为初始化、内存/资源泄漏、逻辑错误等规则,以上对比是综合评分。