美文网首页
Facebook开源Infer集成iOS代码静态分析

Facebook开源Infer集成iOS代码静态分析

作者: iOS小童 | 来源:发表于2019-12-03 10:32 被阅读0次

    Facebook开源Infer集成iOS代码静态分析

    Homebrew安装infer

    brew install infer
    

    设置环境变量

    echo "export PATH=\"\$PATH:`pwd`/infer/infer/bin\"" \ >> ~/.bash_profile &&
    source ~/.bash_profile
    

    依赖组建

    如果没有,请使用homebrew安装
    Python >= 2.7.
    Xcodebuild
    xcpretty
    

    推断检测

    ⚠️ 都需要cd到当前文件/项目
    单个文件
    infer -- clang -c TTHello.m
    
    单个项目
    infer -- xcodebuild -target TTInfer -configuration Debug -sdk iphonesimulator
    
    有pod工程
    infer run -- xcodebuild -workspace TTInfer.xcworkspace -scheme TTInfer -configuration Debug -sdk iphonesimulator
    
    

    编译前清理

    xcodebuild -target TTInfer -configuration Debug -sdk iphonesimulator clean
    
    

    检测成功运行之后,分析结果会被放入一个默认文件夹,infer-out:

    infer-out
    ├── captured/
    ├── log/
    ├── multicore/
    ├── sources/
    ├── specs/
    ├── bugs.txt
    ├── procs.csv
    ├── report.csv
    ├── report.json
    └── stats.json
    1. captured/ 包含了 Infer 分析需要的每个文件的信息.
    2. log/, multicore/, 和 sources/ 文件夹是分析器内部驱动所需。
    3. specs/ 包含了所分析的各个方法的 参数指标,Infer 据此推断文件。
    4. bugs.txt, report.csv, 和 report.json 为三种不同格式的分析结果。
    5. procs.csv and stats.json 包含 debug 信息的分析结果.
    
    

    Infer 工作的流程

    第一个阶段是转化阶段,将源代码转成 Infer 内部的中间语言。
    类 C 语言使用 Clang 进行编译,Java 语言使用 javac 进行编译,编译的同时转成中间语言,输出到 infer-out 目录。
    
    第二个阶段是分析阶段,分析 infer-out 目录下的文件。分析每个方法,如果出现错误的话会继续分析下一个方法,不会被中断,但是会记录下出错的位置,最后将所有出错的地方进行汇总输出。
    默认情况下,每次运行 infer 命令都会删除之前的 infer-out 文件夹。你可以通过 --incremental 参数使用增量模式。增量模式下,运行 infer 命令不会删除 infer-out 文件夹,但是会利用这个文件夹进行 diff,减少分析量。
    一般进行全新一轮分析时直接使用默认的非增量模式,而对于只想分析修改部分情况时,就使用增量模式。
    
    

    使用心得

    Infer 的效率高,支持增量分析,可小范围分析。可定制性不算最强,属于中等,一些代码习惯可能会被检测出问题代码,如:

    NSString *name = @"";
    name = nameArray.firstObject;
    ...
    

    不过Infer 在准确性、性能效率、规则、扩展性、易用性整体度上的把握是做得最好的,值得推荐

    分析结果

    infer.png

    相关文章

      网友评论

          本文标题:Facebook开源Infer集成iOS代码静态分析

          本文链接:https://www.haomeiwen.com/subject/cbfcgctx.html