做过iOS开发的都知道Xcode集成的Analyzer可以进行代码静态检查,而且确实可以帮助分析一些潜在的bug。今天就说一说在Linux开发环境下的两款静态分析工具TscanCode和scan-build。

目前市面上的静态分析工具很多,为什么只拿这两个工具呢?相对于商业软件,它们的性能不是最优的,但却是免费工具中比较出色的。

TscanCode是腾讯出品的开源静态代码扫描工具,scan-build则是LLVM的前端工具Clang所提供的静态分析工具,Xcode的Analyzer就是借助于scan-build来完成静态分析的,作为苹果开源的项目,其质量还是有保证的。

TscanCode

TscanCode是一款静态代码扫描工具,TscanCode旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。

TscanCode支持以下类型规则扫描:

空指针检查,包含可疑的空指针,判空后解引用比如Crash等共3类subid检查。

数据越界,Sprintf_S越界共1类subid检查。

内存泄漏,分配和释放不匹配同1类subid检查。

逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查。

可疑代码检查,if判断中含有可疑的=号,自由变量返回局部变量等共计15类检查。

运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。

详细的使用文档在其github仓库中,有专门的用户手册可以查阅。

我们以开源的cgdb为例,用TscanCode来扫描一下这个项目。

我们将TscanCode工程release/linux_bin目录下Linux平台的可执行文件TscanCode和规则配置文件夹TscanCodeConfig拷贝到cgdb工程的根目录。

在cgdb的根目录执行以下命令:

./TscanCode --xml ./ --writefile=./result.xml --configpath=./TscanCodeConfig

参数解析:

--xml:按照xml格式输出结果文件

./ : 需要扫描检查的代码路径,此处为所有文件。

--writefile :结果输出文件

--configpath: 指定配置文件的路径

更多参数可以直接执行TscanCode查看

执行完毕以后,我们可以打开result.xml看看扫描结果。

result.xml

可以看出来,还是扫描出不少潜在漏洞的。

scan-build

Scan-build 是一个命令行工具,它能够帮助使用者运行静态分析器检查他们的代码, 找出代码的缺陷。

当一个项目在构建中,源文件在编译时同时也被静态分析器有序的检查着。当构建完成时,结构将会作为一个web网页的形式呈现给使用者。

你如何编写代码与scan-build是没有任何关系的。通过重写cc和cxx环境变量来改变你的编译环境,scan-build可以使用一个伪编译器代替原来那个可以正常构建你的项目的编译器。默认情况下,这个伪编译器使用gcc来编译你的代码,然后执行静态分析器进行代码分析。

scan-build的基本使用方式很简单,只需在你的命令行开头输入scan-build即可。详细参数如下:

[root@localhost cgdb]# scan-build

usage: scan-build [-h] [--verbose] [--override-compiler] [--use-cc ]

[--use-c++ ] [--intercept-first] [--status-bugs]

[--exclude ] [--output ] [--keep-empty]

[--html-title

] [--plist | --plist-html]

[--use-analyzer ] [--no-failure-reports]

[--analyze-headers] [--stats] [--internal-stats]

[--maxloop ] [--store ]

[--constraints ] [--analyzer-config ]

[--force-analyze-debug-code]

[--load-plugin ]

[--enable-checker ]

[--disable-checker ] [--help-checkers]

[--help-checkers-verbose]

...

scan-build: error: missing build command

对于那些需用通过configure命令生成Makefile的工程来说,需要先执行以下命令:

scan-build ./configure

这个配置脚本需要在scan-build中运行是因为scan-build能通过介入到编译器来扫描你的源文件。scan-build将编译器gcc设置为analyze-cc。analyze-cc作为一个伪编译器,转发命令行参数给gcc和clang来执行静态分析。

然后执行以下命令,即可开始进行静态分析。

scan-build make

还是用cgdb来进行测试,因为需要通过configure生成Makefile,所以执行以下命令:

sh autogen.sh

scan-build -o cgdb-scan ./configure --prefix=$PWD/build

scan-build -o cgdb-scan make

执行完毕,提示到cgdb-scan目录下查看结果。我将结果拷贝到Windows中进行查看。

result

打开index.html,会有惊喜等着你。因为scan-build是在随着编译过程进行分析,所以其分析结果非常漂亮,和Xcode中的 Analyzer几乎一模一样。

先看看概要

Bug Summary

详细内容可以点击查看

Paste_Image.png

随便挑一个Memory leak看看

Paste_Image.png

Paste_Image.png

Paste_Image.png

详细的出错步骤,是不是很清楚?日常开发中,可以结合两种工具进行分析。

我是咕咕鸡,一个还在不停学习的全栈工程师。

热爱生活,喜欢跑步,家庭是我不断向前进步的动力。

TSCAN算法matlab,使用TscanCode和scan-build进行静态分析相关推荐

  1. dst matlab,DSTcode DST跟踪算法MATLAB代码,复杂环境中仿多目标 实现的单 Other systems 其他 272万源代码下载- www.pudn.com...

    文件名称: DSTcode下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 82 KB 上传时间: 2017-03-17 下载次数: 0 提 供 者: Mar ...

  2. 图片缩放 算法 matlab,图像放大算法总结及MATLAB源程序.doc

    图像放大算法总结及MATLAB源程序 1,插值算法(3种): (1)最邻近插值(近邻取样法): 最近插值的的思想很简单就是把这个非整数坐标作一个四舍五入,取最近的整数点坐标处的点的颜色.可见,最邻近插 ...

  3. TDOA定位的Chan算法MATLAB源代码

    TDOA定位的Chan算法MATLAB源代码 . function [POS_ref,POS1,POS2,POS3,POS4] = TDOA_chan(R,Pbs,Q) %************** ...

  4. dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)

    BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...

  5. Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划

    Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...

  6. matlab虚拟力,31无线传感网络布局优化的虚拟力导向粒子群算法MATLAB源代码

    无线传感网络布局优化的虚拟力导向粒子群算法MATLAB源代码 本源代码主要参考了下面的文献:王雪, 王晟, 马俊杰. 无线传感器网络布局的虚拟力导向微粒群优化策略[J]. 电子学报, 2007, 11 ...

  7. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...

  8. bartlett 算法 matlab,GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)

    以优化SVM算法的参数c和g为例,对GWO算法MATLAB源码进行了逐行中文注解. tic % 计时器 %% 清空环境变量 close all clear clc format compact %% ...

  9. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

最新文章

  1. 编程成长日记——有意思的编程题(二)
  2. eclipse调试详解
  3. 码农翻身讲计算机基础:并发,同步与信号量
  4. [云炬创业基础笔记]第五章创业机会评估测试2
  5. 进程外Session保存和全局文件错误捕获
  6. 技巧 | 如何批量地将整型变量转换为因子变量
  7. 计算机网络class 3(速率的相关性能指标)
  8. 脚本小子福利:安卓远控木马直接生成
  9. 使用BoundsChecker
  10. 矢量网络分析仪 是什么 都有哪些功能
  11. 希捷硬盘查询保修期限的网址
  12. JavaScript事件解析
  13. Google谷歌浏览器打开显示搜狗解决办法!
  14. 同步消息和异步消息的区别
  15. 基于ROS2开发的点云体素化
  16. 2020年阿贝尔(Abel)奖揭晓,两位概率论大佬横扫数学界最高荣誉
  17. mysql去重分组_mysql 分组 去重
  18. 上品携手SAP领跑服装零售行业
  19. 晋级 7 问 - 技术晋级答辩中常见问题解析
  20. 免费数据集 人工智能训练方面

热门文章

  1. Integer的常用方法和String类型的常用方法
  2. eclipse上的.properties文件中文编辑显示问题
  3. Java 中的异常处理
  4. mysql中对象标识符的命名规则,标准规范数据库命名规范.doc
  5. 【重定向 return “redirect:/***“的作用 】
  6. 包容网关 Inclusive Gateway
  7. 我们不生产代码,我们只是代码的搬运工
  8. leetcode题解62-不同路径
  9. NetworkManager概述
  10. java用volatile或AtomicBoolean实现高效并发处理 (只初始化一次的功能要求)