TscanCode代码扫描工具

news/2024/12/2 12:50:52/

TscanCode介绍

TscanCode 是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。TScanCode 比较适用于游戏开发代码扫描,有着不错的准确率和效率,其性能测试可以见:https://blog.csdn.net/wetest_tencent/article/details/51516347。
TscanCode 主要能够发现的问题如下:
1、自动变量检查: 返回自动变量(局部变量)指针;
2、越界检查:数组越界返回自动变量(局部变量)指针;
3、类检查:构造函数初始化;
4、内存泄露检查;
5、空指针检查;
6、废弃函数检查;

下载TscanCode

TscanCode 已经在 Github 上开源,地址是:https://github.com/Tencent/TscanCode。
其中项目文件夹对应的如下:

release	->编译后的二进制文件,分别有Linux、Mac、Windows平台
samples	->测试的代码样例,分别有C++、C#、Lua语言
trunk		->TscanCode源代码

为了方便起见,下载对应平台的二进制可执行文件便可以运行,其中 Win 平台是有 GUI 图形界面,Linux 中要使用命令和手动配置规则,下面介绍一下在 Win 和 Linux 平台使用 TscanCode。

Win下使用TscanCode

安装 TscanCode 后,双击打开后,主界面上选择:扫描文件夹,然后打开代码的文件夹,点击:开始扫描。
win_tscancode_1
扫描完成后会出现结果:
win_tscancode_2
双击可以查看代码中存在的错误,比如:
win_tscancode_3
对于扫描后的结果,可以保存为 xml 配置文件,方便下一次直接在主界上直接打开:结果查看,选中该文件即可。
还可以在设置中选择扫描规则,每个规则都有对应的代码实例可供参考。
win_tscancode_4

Linux下使用TscanCode

我们将 Linux 版本二进制压缩包解压,然后进入 TscanCodeV2.14.2395.linux 目录,有一个 cfg 文件夹和一个 tscancode 二进制文件,需要使用 chmod +x tscancode 对其加上可执行权限。
在 Linux 下可通过 cfg/cfg.xml 对扫描的规则进行配置,其中通过设置 value=0 则禁用,value=1 则启用,或直接使用默认的扫描规则。
需要注意的是:扫描的路径中不能包含 root 文件夹,TscanCode特殊性。
然后再执行如下命令对 samples/cpp/下的所有 C++ 文件代码进行扫描:

./tscancode --xml --enable=all -q /home/crazyang/samples/cpp/ >scan_result.xml 2>&1

执行后,就会看到在该目录下生成了 scan_result.xml 文件,文件中就是扫描的结果,如果我们需要扫描结果重定向到文件中,最好加上 -q 参数,否则会将扫描的进度信息也重定向到文件中,这些信息仅在终端中显示进度有用。
注意:如果不熟悉后面的参数,可以使用 ./tscancode -h 查看帮助文档。

$ ./tscancode -h
TscanCode - A tool for static C/C++ code analysisSyntax:tscancode [OPTIONS] [files or paths]If a directory is given instead of a filename, *.cpp, *.cxx, *.cc, *.c++, *.c,
*.tpp, and *.txx files are checked recursively from the given directory.Options:-D<ID>               Define preprocessor symbol. Unless --max-configs or--force is used, TscanCode will only check the givenconfiguration when -D is used.Example: '-DDEBUG=1 -D__cplusplus'.-U<ID>               Undefine preprocessor symbol. Use -U to explicitlyhide certain #ifdef <ID> code paths from checking.Example: '-UDEBUG'--enable=<id>        Enable additional checks. The available ids are:* allEnable all checks. It is recommended to onlyuse --enable=all when the whole program isscanned, because this enables unusedFunction.* warningEnable warning messages* styleEnable all coding style checks. All messageswith the severities 'style', 'performance' and'portability' are enabled.* performanceEnable performance messages* portabilityEnable portability messages* informationEnable information messages* unusedFunctionCheck for unused functions. It is recommendto only enable this when the whole program isscanned.* missingIncludeWarn if there are missing includes. Fordetailed information, use '--check-config'.Several ids can be given if you separate them withcommas. See also --std-h, --help           Print this help.-I <dir>             Give path to search for include files. Give several -Iparameters to give several paths. First given path issearched for contained header files first. If paths arerelative to source files, this is not needed.-j <jobs>            Start [jobs] threads to do the checking simultaneously.-q, --quiet          Do not show progress reports.--xml                Write results in xml format to error stream (stderr).Example usage:# Recursively check the current folder. Print the progress on the screen and# write errors to a file:tscancode . 2> err.txt# Recursively check ../myproject/ and don't print progress:tscancode --quiet ../myproject/# Check test.cpp, enable all checks:tscancode --enable=all test.cpp# Check f.cpp and search include files from inc1/ and inc2/:tscancode -I inc1/ -I inc2/ f.cpp

最后得到的 scan_result.xml 结果文件,可以下载下来使用 Excel 工具打开 XML 报告(为了处理更直观),在左侧插入一列处理情况。
开发人员根据报告对代码上下文进行分析,判断是否为工具误报。
对于确认为问题的代码,由开发人员处理后重新进行代码安全静态扫描,直到问题关闭。

参考:
https://github.com/Tencent/TscanCode
静态代码检查
C++代码质量扫描主流工具深度比较
代码扫描工具TScanCode


http://www.ppmy.cn/news/387986.html

相关文章

中国象棋程序的设计与实现(二)--源码

本篇将正式公布 中国象棋程序–高级版–楚汉棋兵 的所有源码。介绍一些相关信息&#xff0c;如源码下载地址、QQ交流群、源码结构、版权声明。其它更多文档&#xff0c;如 毕业设计论文、项目架构图图、心得体会、开发记录&#xff0c;将在本月全部公布。 有兴趣的同学&#x…

使用c#捕获usb扫描枪扫描二维码、条形码结果(支持中文版)

目录 前因 代码 思路 左右shift及其他 尝试获得中文返回内容 处理中文信息 注意编码及解码 前因 之前在18年写过一个使用c#捕获usb扫描枪扫描二维码、条形码结果&#xff0c;当时我是没有遇到需要使用中文的情况&#xff0c;因为二维码都是我自己控制生成的&#xff0c…

象棋代码

class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 JToolBar jmain; //重新开始 JButton anew; //悔棋 JButton repent; //打开 JBut…

基于Java的中国象棋对弈系统

请自行按此找一些棋子的图片&#xff0c;main是棋盘 课程设计基本功能描述 实现一个中国象棋对弈的软件&#xff0c;实现中国象棋的规则&#xff1a;棋子共有三十二个&#xff0c;分为红、黑两组&#xff0c;每组十六个&#xff0c;各分七种&#xff0c;其名称和数目如下所述…

QingScan扫描器安装、使用

一、 QingScan介绍 QingScan是一个安全工具整合系统&#xff0c;解决你平时使用各种工具一个个打 开填写扫描目标的麻烦过程&#xff1b;QingScan工具只需要你把URL给它&#xff0c;它会调 用市面上各种扫描工具&#xff0c;对URL扫描&#xff0c;最后把结果汇聚展示 项目地址…

海康工业相机 C# 开发示例

一.学习资料 1.官网下载安装MVS软件。 2.文件资料路径&#xff1a;C:\Program Files (x86)\MVS\Development\Documentations 3.引用的DLL路径&#xff1a;C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64\MvCameraControl.dll&#xff08;实测是这个路径&#x…

关键字static,final的使用

关键字&#xff1a;static 概念 是java中的一个关键字 用于修饰成员&#xff08;成员变量和成员方法&#xff09; 类属性、类方法的设计思想 概念&#xff1a; 当我们编写一个类时&#xff0c;其实就是在描述其对象的属性和行为&#xff0c;而并没有产生实 质上的对象&#x…

IMX6ULL裸机篇之SPI实验-ICM20608代码实现

一. SPI 实验 SPI实验&#xff1a;学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608&#xff0c;读取 ICM-20608 的六轴数据。 本文学习 SPI通信实验中&#xff0c;涉及从设备的 SPI代码编写。 之前学习了 SPI 主控芯片代码的编写&#xff0c;如下所示&#xff1a; IMX6ULL…