作过iOS
开发的都知道Xcode
集成的Analyzer
能够进行代码静态检查,并且确实能够帮助分析一些潜在的bug。今天就说一说在Linux开发环境下的两款静态分析工具TscanCode
和scan-build
。html
目前市面上的静态分析工具不少,为何只拿这两个工具呢?相对于商业软件,它们的性能不是最优的,但倒是免费工具中比较出色的。前端
TscanCode
是腾讯出品的开源静态代码扫描工具,scan-build
则是LLVM
的前端工具Clang
所提供的静态分析工具,Xcode
的Analyzer
就是借助于scan-build
来完成静态分析的,做为苹果开源的项目,其质量仍是有保证的。linux
TscanCode是一款静态代码扫描工具,TscanCode旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不一样需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。c++
TscanCode支持如下类型规则扫描:git
详细的使用文档在其github仓库中,有专门的用户手册能够查阅。github
咱们以开源的cgdb为例,用TscanCode
来扫描一下这个项目。web
咱们将TscanCode
工程release/linux_bin
目录下Linux平台的可执行文件TscanCode
和规则配置文件夹TscanCodeConfig
拷贝到cgdb
工程的根目录。ide
在cgdb
的根目录执行如下命令:工具
./TscanCode --xml ./ --writefile=./result.xml --configpath=./TscanCodeConfig
参数解析:
--xml:按照xml格式输出结果文件
./ : 须要扫描检查的代码路径,此处为全部文件。
--writefile :结果输出文件
--configpath: 指定配置文件的路径
更多参数能够直接执行TscanCode查看oop
执行完毕之后,咱们能够打开result.xml看看扫描结果。
result.xml
能够看出来,仍是扫描出很多潜在漏洞的。
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 <path>] [--use-c++ <path>] [--intercept-first] [--status-bugs] [--exclude <directory>] [--output <path>] [--keep-empty] [--html-title <title>] [--plist | --plist-html] [--use-analyzer <path>] [--no-failure-reports] [--analyze-headers] [--stats] [--internal-stats] [--maxloop <loop count>] [--store <model>] [--constraints <model>] [--analyzer-config <options>] [--force-analyze-debug-code] [--load-plugin <plugin library>] [--enable-checker <checker name>] [--disable-checker <checker name>] [--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
详细的出错步骤,是否是很清楚?平常开发中,能够结合两种工具进行分析。
做者:咕咕鷄 连接:https://www.jianshu.com/p/f99d9a5d25ac 来源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。