Clang &IOS 静态代码分析工具scan-build

  • Author:Echo Chen(陈斌)
  • Email:[email protected]
  • Blog:Blog.csdn.net/chen19870707

    Date:Jan.4th, 2015

    IOS项目和Clang项目可以借助scan-build 实现代码的静态分析,找出代码缺陷。

    1.什么是 Scan-build?

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

    2.scan-build是怎么工作的?

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

    3.scan-build工作时需要哪些编译环境呢?

  • 你如何编写代码与scan-build是没有任何关系的。通过重写cc和cxx环境变量来改变你的编译环境,scan-build可以使用一个伪编译器代替原来那个可以正常构建你的项目的编译器。默认情况下,这个伪编译器使用gcc来编译你的代码,然后执行静态分析器进行代码分析。
  • 人为的一些操作在很多情况下都会有些好的或坏的影响。请查询scan-build的帮助文档,它会告诉你在上面的情况下,如何使其正常工作。
  • scan-build命令从本质上介入到工程的构建过程中,分析整个工作。这就意味着,在工作构建过程中, scan-build通过gcc来分析已经编译了的源文件。也就是说,没有被编译的文件是不会被分析的。

    4.基本使用

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

    首先, scan-build使用make命令分析已构建的工作代码,然后scan-build使用xcodebuild命令分析已构建的工程。

    下面是scan-build命令的通用格式:

    scan-build 会逐个运行这些命令,其参数也是按顺序执行。例如,在make命令中传入一个 -j4 的参数,结果是一个4核的并行编译操作。

    在大多数情况下, 构建命令完成后,scan-build是不会再处理参数。总之,scan-build应支持并行构建,而不是分布式构建。

    当然我们可以用scan-build来分析具体的文件:

    这个命令实现对t1.c 和 t2.c 文件的分析。

    其它参数像上面所提到的,scan-build能够处理一些额外的参数。有些参数作为命令的前缀。

    例如:

    下面是一些常用的参数:

    -o html 报告文件的存放目录。可以按需要创建一些子目录,来区分每个运行的分

    析器。如果没有指定这个参数,默认将报告文件保存在/tmp目录里。

    -h 显示scan-build的所有参数

    -k 增加一个继续运行的参数到具体的命令中

    -v 冗余输出结果。可以选择2个或3个”-v”增加冗余度。

    -V 当命令完成后,在浏览器中查看运行结果。

    5.scan-build的输出结果

    scan-build的输出结果是一个HTML文件集合,每个html文件代表一个独立的缺陷报告。 index.html文件是用来查询所有的缺陷。你可以用浏览器打开index.html文件查看所有缺陷报告。

    html报告文件的存放是油-o参数指定的,默认是保存在/tmp目录下。scan-build会打印出报告所在路径。如果你想在命令执行完后立即去查看报告,那么你应该传入一个-V参数。

    6.高级使用

    大多数工程能在debug模式下构建,并支持断言功能。静态分析器执行断言来删改不可执行的路径,在许多情况下这可以大量减少由工具所产生的伪错误报告。

    scan-build使用-v参数来产生冗余的输出;两个-v参数产生更多的信息。重定向scan-build的输出到一个文档中对填写缺陷报告非常有用,因为我们可以清楚的知道具体传入给分析器的参数。为了更多和更综合的日志,不要用并行构建。

    6.1 在scan-build中运行./configure

    如果一个已经分析了的工作使用脚本自动生成配置信息,那么你很可能需要通过scan-build运行配置脚本,以此来分析工程。

    例如:

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

    6.2 分析iPhone 工程

    概率上iPhone应用程序和桌面应用程序很相似。scan-build也能分析这些工程,但是用户在构建命令行iPhone工程时会遇到一些问题,因为缺少一些额外的预备步骤(例如建立代码签名)。

    6.3 推荐:使用”Build and Analyze”

    分析iPhone工程最简单的方式是使用Build and Analyze feature in Xcode3.2(基于Clang的静态分析器)。这样用户只需要点击一个按钮就能实现这些功能而不用下面所描述的操作。

    官方网站上会有这方面的功能介绍。

    6.4 直接使用 scan-build

      • 在debug模式下分析你的工程,要么在xcode中设置这个属性,要么用-configuration Debug参数给xcodebuild设定属性。
      • 用模拟器分析你的工程。当链接了设备时是可以分析你的代码的,但是这只是对使用”Build and Analyze feature”时更方便些。
      • 检查你的代码签名是否也设置到模拟器中,确保这个选项是Don’t Code Sign。
      • 如果你的iPhone系统是2.2,你可以运行 scan-build用以下命令行方式。

    同样,如果你的iPhone系统是3.0

    6.5 使用合适的编译器

    回想一下, scan-build分析工程时是用gcc编译工程,用clang分析工程。当分析iPhone工程时, scan-build也许会选择错误的编译器而非xcode用来构建工程的编译器。这是因为你的系统中可能安装了多个gcc的版本,尤其是你在做iPhone开发时。

    当你使用Mac OS 10。5(Leopard) 来开发iPhone OS 3。0程序时,就会产生这样的问题。默认的雪豹编译器是gcc-4。0,但是iPhone OS 3。0的却是gcc-4。2。当在模拟器中编译你的应用程序时, scan-build使用正确的gcc版本是非常和重要的,否则你会看到一些奇怪的编译错误。

    scan-build提供 –use-cc和—use-c++选项。注意,虽然你主要的兴趣是分析你的工程,但请注意分析器与构建过程密切相关,不能编译的代码是不能够被分析到的。如果你不确定编译器xcode所使用的版本,试着就运行xcodebuild。你会看到完整的xcode所使用的编译器路径,通过使用- -use-cc参数。

    -

  • Echo Chen:Blog.csdn.net/chen19870707

    -

  • 时间: 2024-10-25 19:54:40

    Clang &IOS 静态代码分析工具scan-build的相关文章

    Java静态代码分析工具Infer

    Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

    常用 Java 静态代码分析工具的分析与比较

    转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

    如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用. 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT. 1.下载MAT http://www.eclipse.org/mat/download

    来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧.

    【转载】常用 Java 静态代码分析工具的分析与比较

    摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团

    [转载] 常用 Java 静态代码分析工具的分析与比较

    转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺

    PVS-Studio 静态代码分析工具推荐

    最近发现一款非常好用的静态代码分析工具PVS-Studio,是一家俄罗斯公司开发的,用于诊断C/C++/C++11源代码中的错误.它兼容Visual Studio开发环境,最新版本支持Visual Studio2015.PVS-Studio安装好之后,打开Visual Studio导航栏中就会出现PVS-Studio,我用的是Visual Studio2010,如下图所示. 以下是我利用PVS-Studio检查出当前程序中一些问题的示例: 1.变量给自己赋值. 2.漏掉成员变量赋值. 3.条件判

    Java静态代码分析工具——FindBugs插件的安装与使用

    1 什么是FindBugs FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析.不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式来鉴别代码是否符合一些固定的规范. 2 如何安装FindBugs? 作为Eclipse的一个插件,可以将Findbugs集成到Eclipse中使用. 第一种是在线安装:在Eclipse的插件安装地址中输入http:

    C++静态代码分析工具对比cppCheck与PreFast

    具体内容参看文件<CppCheck和PreFast对Cplusplus代码静态分析测试.zip> C++测试源代码main.cpp #define NULL 0 #include <stdio.h> #include <string.h> // 没有初始化 void defect1() { int a; int b; b = a; } // 空指针取值 void defect2( int b, int c) { int * p = NULL; int a = 1 ; i