`
lion456
  • 浏览: 10953 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Obj-c代码静态扫描 iPhone代码静态扫描的问题

    博客分类:
  • ios
 
阅读更多
转自:http://hi.baidu.com/%CD%F5%D7%D36%BA%C5/blog/item/4dc06cd3da18c6c2a9ec9a08.html

关于Obj-c代码静态扫描 iPhone代码静态扫描的问题
2011-12-05 14:26

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

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

具体可以见:

http://clang-analyzer.llvm.org/

 

但是想要出代码扫描报告的话,就像eclipse 下 java的find bug的东西的话,就有问题了.

得借助另一种工具:

scan-build

这个工具是之前由苹果公司主持开发,后来捐给了开源社区

http://clang-analyzer.llvm.org/ 这个网址就是他的官方网站.

它就新工具是258版本:http://clang-analyzer.llvm.org/checker/checker-258.tar.bz2

下载下来以后解压文件,再设置你的PATH

打开命令终端:

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

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

source ~/.profile

 

然后再进入到你iPhone或者iPad的文件根目录下面:

输入命令:

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,用哪一种编译器来编译了.

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics