TscanCode介绍
TscanCode 是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。TScanCode 比较适用于游戏开发代码扫描,有着不错的准确率和效率,其性能测试可以见:https://blog.csdn.net/wetest_tencent/article/details/51516347
TscanCode 主要能够发现的问题如下:
- 空指针错误
- 越界错误
- 资源泄露错误
- 未初始化错误
- 运算错误
- 可疑错误
- 逻辑错误
空指针规则
空指针检查规则主要检查是否存在对赋值为空的指针解引用的情况,空指针是c/c++中最大的问题,经常造成程序崩溃的致命错误。
越界规则
越界一般来讲是指数组下标越界,或者缓冲区读写越界。这类错误会导致非法内存的访问,引发程序崩溃或者错误。
变量未初始化规则
变量未初始化顾名思义:变量声明后没有赋初值,其分配的内存值是随机的。这也是代码中容易出现的问题,会导致不确定的程序行为,造成严重的后果。
内存/资源泄露规则
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存,从而造成了内存浪费的情况。内存泄漏是静态下很难检测的一种错误,一般需要动态分析工具进行检测,如valgrind工具会捕获malloc()/free()/new/delete的调用,监控内存分配和释放,从动态上检测程序是否存在内存泄漏。因此,静态代码分析能检查的内存泄漏就非常有限了,当前各工具主要是从代码写法上检查内存分配和释放是否配对使用。比如:fopen打开文件后在退出函数前是否有执行fclose,new[]和delete[]是否配对使用等。
逻辑错误规则
逻辑错误:指可能存在的逻辑问题,如if不同分支内容相同,在switch内缺少break等,对指针使用sizeof进行空间分配等问题。
Win下使用TscanCode
安装 TscanCode 后,双击打开后,主界面上选择:扫描文件夹,然后打开代码的文件夹,点击:开始扫描。
扫描完成后会出现结果:
双击可以查看代码中存在的错误,比如:
对于扫描后的结果,可以保存为 xml 配置文件,方便下一次直接在主界上直接打开:结果查看,选中该文件即可。
还可以在设置中选择扫描规则,每个规则都有对应的代码实例可供参考。