其他分享
首页 > 其他分享> > Clang Static Analyzer - 静态代码分析工具

Clang Static Analyzer - 静态代码分析工具

作者:互联网

Clang Static Analyzer - 静态代码分析工具

LLVM不仅仅是一个编译器,同时提供了模块化的功能和库,用于编译器的开发和功能扩展。常规的一个编译器分为前端、优化器和后端,LLVM编译器也不例外,Clang就是属于一个编译器的前端部分,LLVM属于优化器和后端,当然LLVM也可以支持其他类型的前端,比如GCC前端编译器。

基础扩展

1.传统编译器是一个三层模型结构,包括前端编译器、优化器、后端编译器。

2.LLVM是Low Level Virtual Machine的首字母缩写。 本来是一个低级别的虚拟机,但现在它是一种编译器的基础程序集合,包括一些LLVM中介码、LLVM除错工具等,它利用虚拟技术(中介码)为开发语言的编译期、链接期、运行期以及闲置期提供了优化和改良。

3.Clang是一个前端编译器,Clang只支持C家族的三门语言C、C++和Objective-C,相比于GCC,Clang的优势在于速度快、内存占用体积小、模块化、诊断信息可读性强、设计清晰扩展性强等。

4.静态检查工具说明

clang安装

1.apt安装

sudo apt-get install clang
sudo apt-get install llvm

注意:如果这样安装完成后执行scan-build提示没有此命令,需要单独将scan-build安装或改用下面两种方式安装。

2.官网下载整包安装

在llvm的官网 可以查看已经编译好的各个平台的release版本,Clang也会作为llvm release的一部分一起发布

3.源码编译安装

参考官网 上的步骤,下载源码后配置一下cmake,编译、安装即可。

可以先安装一些可能用到的工具:

sudo apt install gcc
sudo apt install g++
sudo apt install make
sudo apt install cmake 

使用

static analyzer的实质是提供了一个fake compiler,在真正的compile完成之后,进行analyzer

1.安装好后, make 之前加上 scan-build 就可以了。

scan-build --use-analyzer `which clang` make

2.结合autoconf,cmake等工具扫描实际项目

scan-build ./configure
scan-build make

cmake -DCMAKE_C_COMPILER=ccc-analyzer -DCMAKE_CXX_COMPILER=c++-analyzer ..

3.checker-检查规则

内置的 checker 存放在 ../llvm/tools/clang/lib/StaticAnalyzer/Checkers 目录下。 这些 checker默认情况下并没有全部开启,所以需要根据情况启用合适的 checker。可以使用-enable-checker-disable-checker开启和禁用具体的 checker 或者某种类别的 checker。

如:

scan-build -enable-checker alpha.security.ArrayBoundV2 ... # 启用数组边界检查

4.相关参数

$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

查看结果

1.若代码存在问题,会生成html报告,否则不生成。

2.生成成功后,可在浏览器直接打开查看,也可以使用scan-view命令进行查看。

3.生成位置若不指定则在/tmp下。

静态检查知识补充

使用静态分析库有几个注意点:

常见问题

1.Clang开源的代码检查库更新比较频繁,会有更多的bug提示和代码检查.所以使用最新的检查库,可以带来更全面的检查,以提高代码质量和健壮性。

参考:

1.scan-build:从命令行运行分析器

2.llvm, clang 和 scan-build 的安装和使用

3.Clang Static Analyzer

标签:scan,--,checker,Clang,编译器,Analyzer,Static,build
来源: https://www.cnblogs.com/clwsec/p/13939488.html