Clang 是一个 C、C++ 和 Objective-C 编程语言的编译器前端,采用了底层虚拟机(LLVM)作为其后端,提供一个GNU编译器套装(GCC)的替代品。克里斯·拉特纳,在苹果公司的赞助支持下进行开发,而源代码授权是使用类 BSD 的开源授权。
Clang静态分析和Instruments来剖析代码有一些不同,Clang更致力于在编译的过程中通过自身的一套判断机制来找出代码中潜在的隐患。
在XCode 3.2之后的版本里,Clang已经被集成进来,Static Analysis 是基于 Clang 的非常好的静态代码分析工具。可以从xcode直接运行Static Analysis 分析器。
Static Analysis 优点:
1. 使用操作容易。
2. 能够在编码阶段,开发自行进行代码检查。早期发现代码隐患。
3. 直接分析源代码来发现程序中的错误,而不需要实际运行。
4. 自动检测objective-C程序中的BUG,发现内存泄露和其它问题。
5. 内存问题发现越早,解决的代价就越小。
使用方法:
1 : 确保你的程序没有被编译过(编译过了就使用Clean all targets清除编译)
2 :点击Product > Analyze如下图:
4 :现在你可以像解决以前的warning 或者 error一样,对提示的地方点进去。
5 :可能会存在问题的一些情况:
各处内存泄漏:
对象引用隐患(内存已释放可能又被使用了)
未使用到的函数:
未初始化的变量
数据赋值隐患:
The left operand of …… is a garbage value
分析解决方法(例:内存泄露)
1.点击左侧对应内存泄露某处,右侧显示泄露行
2. 双击行所对应的信息,显示交互详情
3. 修改代码,解决泄露问题。
4. 修改后再次静态扫描发现,错误从40减到39,修复的代码行已不再出现错误。
注:上述工程截图为测试Demo
建议使用场景:
1. 建议在开发编码阶段使用,直接分析源代码来发现程序中的错误,而不需要实际运行,提前发现代码隐患。
2. 测试在冒烟测试时可先进行扫描,错误太多代码修改量太大的情况下可暂不介入测试,以免造成返工。
个人使用感受:
淘宝读书客户端ihone1.0版本,缺少经验,在性能测试执行阶段进行该静态扫描,功能测试返工情况较严重。
在2.0版本中,推荐给开发,在开发编码中就较大部份内存泄露问题进行了解决,特别是需要release和缺少dealloc的地方。
在之后使用instruments内存泄露测试中,泄露少,只需进行较少的代码改动,功能回归工作量小。