Obj-c代码静态扫描 ios代码静态扫描的问题

来源:互联网 发布:不需要网络的翻译软件 编辑:程序博客网 时间:2024/05/16 15:11

静态解析程序

静态解析是指不用执行程序,而是从程序的代码构成来分析错误和预测问题。比如Java中的FindBugs,C++中的prefast等。通过这些工具可以一定程度的减少程序中的错误数量。

一般静态解析,分析以下几类问题:

  • 代码形式,名称是否违规
  • 警告容易出错的代码
  • 警告程序运行时可能出现问题的代码

比如容易引起内存泄漏的代码,会被其检测出,提示你修正。

用Xcode开发的同事都应该知道Xcode是可以用代码的静态扫描的.

就在Xcode菜单栏->Build->Build and Analyze   这里检查出,比直接编译下更容易出错的代码,并且点击相关的提示,会有为什么提示你的代码有问题.


我门还可以借助scan-build  做同样的分析。
方法是:
 先安装scan-build安装包
下载地址:http://clang-analyzer.llvm.org/installation
下载下来以后解压文件,再设置你的Path

打开命令终端:

echo "SCANBUILD=你的解压路径/checker">>~/.profile

echo "export PATH=$SCANBUILD:$PATH">>~/.profile

source ~/.profile

然后再进入到你的项目工程文件根目录下面:

输入命令:

scan-build -k -o "你指定的文件报告输出路径" xcodebuild

你还可以用:scan-build -Vv-k -o "你指定的文件报告输出路径" xcodebuild

报告生成成功以后,他会自动在浏览器里打开报告,

并且功能更强大.

或者你在命令行下,进入你报告文件的根目录,用scan-view "你指定的文件报告输出路径" 命令来调用报告查看功能.

 

就可以了.代码编译完成以的一,会生成漂亮的html文档如下图:


当然也会有一些特殊的情况.

在Xcode3下面,我们选择GCC4.2为编译的时候,我们可以通过以上命令直接编译就可以通过了

但是到最新的Xcode4.2以后,就没有GCC4.2,只有llvm gcc4.2 和llvm3.0的选项了.

进入了官网的bug系统里,发现了这个问题,下面有一同事回答了我们的问题

http://llvm.org/bugs/show_bug.cgi?id=11191

你可以用以下命令来生成新的报告:

scan-build -k -o ~/Desktop/report/iPhone/ --use-cc=/Developer/usr/bin/clang xcodebuild -configuration AdHoc -sdk iphoneos5.0 IPHONEOS_DEPLOYMENT_TARGET=3.0 GCC_VERSION="com.apple.compilers.llvm.clang.1_0"

其中,红色部分你各位要注意的.

解释一下上面的命令.

scan-build,就是扫描静态代码,并编译出app包后,生成代码扫描报告.

-k参数是,编译出错了,也会继续扫描代码.英文keeping的缩写了

-o参数是 报告生成存放地点,英文output的缩写了

--use-cc=path 表示用哪一种系统器来编译,你可以选择gcc或者gcc4.2,以满足不同的代码编译.这里,我们选择默认的clang(这里要写清楚路径)编译.这里gcc4.2和clang还有llvm的关系,有机会,再出文章来分析,网上也有相关的分析了,有兴趣的朋友可以自己去查一下.

xcodebuild 命令是告诉scan-build用Xcode来系统程序,这里可以选择GCC,目录scan-build只支持这二种编译.

-configuration AdHoc -sdk iphoneos5.0 IPHONEOS_DEPLOYMENT_TARGET=3.0 GCC_VERSION="com.apple.compilers.llvm.clang.1_0"后面这一串,我就不想多说了.

可以指出来的是,这里是指定Xcode系统选择的编译方式,证书使用哪一个?打包支持到ios3.0,用哪一种编译器来编译了.

有更多的代码,都可以自己去定义的.

 

参考文档:http://clang-analyzer.llvm.org/scan-build.html#scanbuild_basicusage
http://www.yifeiyang.net/iphone-development-skills-of-tool-papers-3-use-the-clang-static-analysis-objective-c-program/