转自: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,用哪一种编译器来编译了.
有更多的代码,都可以自己去定义的.
分享到:
相关推荐
obj-c, win 环境下的 makefile 和简单的程序,自己用的
Objective-C+2.0之前需要了解的:关于Obj-C内存管理的规则
Objective-C 2.0之前需要了解的:关于Obj-C内存管理的规则。
obj-c2.0大全
模型格式转换工具(osgb-obj-ive) 可在osgb、ogb、obj、ive间转换,亲测可用。
revit导出obj功能MIT协议随意使用。.net C#工程 导出 obj +mtl文件 并且较少 原有revit大小(导出信息减少非轻量化)
Yahoo开源的在线obj-c -> swift工具
SVGQuartzRenderer is a basic SVG renderer written in Obj-C that uses CoreGraphics to render SVG files. The goal of SVGQuartzRenderer is to be a simple drop-in SVG renderer that is compatible with the ...
OBJ-socket.OBJ-socket.
SVGQuartzRenderer is a basic SVG renderer written in Obj-C that uses CoreGraphics to render SVG files. The goal of SVGQuartzRenderer is to be a simple drop-in SVG renderer that is compatible with the ...
java-obj-to-opengl Java class that reads and converts a wavefront .obj 3d model file to java object. The result object will contain all the necessary data for render of the 3d model with OpenGL ES on ...
WebViewJavascriptBridge-用于在UIWebViews/WebViews中Obj-C和JavaScript互通消息的iOS/OSX桥梁
个人学习objective-c和xcode helloworld 笔记,比较了objective-c 和C++ JAVA的一些区别
前端开源库-obj-flatten对象展平,将嵌套对象转换为展平对象。
python库。资源全名:dj-obj-update-0.4.0.tar.gz
一個客製化的Obj-C數字選擇器
3D-obj-viewer.zip,简单的obj文件查看器。,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。
0136-OBJ-100014011管道&配件焊接规范[借鉴].pdf
JavaScriptTalkNativeEasy 是一个iOS平台用于Obj-C和JavaScript交互的库,此库是基于 Apple 的JavaScriptCore 、 WebKit 、 runtime进行封装的。
obj文件解析器开源,可重用的Wavefront 3D对象文件(.OBJ)解析器,以javascript编写,并作为NPM软件包自由分发。特征仅支持(.OBJ)文件,请参阅mtl-file-parser以获取mtl文件不区分大小写,灵活的解析器简单的JS...