LLVM在静态分析上的增强 @ WWDC 2013

简介:

在代码还没有真正跑起来的时候,可以利用Clang对代码进行静态分析

1. 可以应用快捷键Shift+Command+B对项目代码进行分析:


2. 也可以针对某个文件进行分析(现有版本貌似不能针对特定文件):


3. 或者选择在构建过程中同时进行静态分析(深度或者快速):



通常,我们静态分析可以发现下面一些问题:

1. Dead store —— 对一个局部变量赋值后就再也没用过了。


2. 使用到了未初始化的变量。


3. 可能存在内存泄露。


4. 逻辑上可能存在问题,比如对空指针解引用。



而在新版本的LLVM中,新增了一个可能对App健壮性有不小帮助的分析点——在集合/容器结构中插空:



可以看出,Clang在静态分析时会对代码逻辑进行一些假设,分析是否有可能插入空值。

此外,在内存管理方面也有一些改进,比如内存分配和释放的一致性考虑,以及释放后可能存在的访问野指针问题:



这两点主要是为C++代码考虑的,好比在OC代码中release之后置为nil,在C++代码中,释放内存后也应该置空。


最后就是在跨函数上的分析了。在Xcode 4.3时代,静态分析只能针对单个函数;而在Xcode 4.4版本,开始支持基本的跨函数调用的分析;现在Xcode 5集成了新的LLVM,在跨函数调用分析上有了进一步增强。

遗憾的是,我对这一块体验不多,肚子里面笔墨不够,一时写不出什么东西来。。。希望有高手不吝赐教。


——Jason Lee @ Hangzhou

目录
相关文章
|
8天前
|
JavaScript 前端开发 编译器
TypeScript的编译器、编辑器支持与工具链:构建高效开发环境的秘密武器
【4月更文挑战第23天】TypeScript的强大力量源于其编译器、编辑器支持和工具链,它们打造了高效的开发环境。编译器`tsc`进行类型检查、语法分析和代码转换;编辑器如VS Code提供智能提示、错误检查和格式化;工具链包括Webpack、Rollup等构建工具,Jest、Mocha等测试框架,以及代码质量和性能分析工具。这些组合使用能提升开发效率、保证代码质量和优化项目性能。
|
7月前
|
Rust 开发工具 开发者
Ruff代码分析
Ruff代码分析
|
网络安全 图形学 UED
Rhino ceros 7.25:3D设计软件的全新进化!+Rhino ceros 全版本安装包
Rhino ceros 7.25:3D设计软件的全新进化!+Rhino ceros 全版本安装包
|
缓存 安全 程序员
IDA F5 增强插件,还我源代码(一)
IDA F5 增强插件,还我源代码(一)
IDA F5 增强插件,还我源代码(一)
|
前端开发 编译器 iOS开发
Clang代码覆盖率检测(插桩技术)
Clang的全称是C Language Family Frontend for LLVM,即基于LLVM的C系列语言的前端编译器。iOS应用的前端编译,即是采用Clang完成的。本篇文章,我们主要介绍Clang内置的一个简单的代码覆盖率检测功能,对于iOS开发来说,此功能更多用于Objective-C的方法插桩,为二进制重排提供支持,优化应用启动速度。但代码覆盖率检测功能并不仅仅只能应用与二进制重排,其本质是对于函数级、基本块级或代码边缘级插入回调,我们可以基于这一原理更灵活的实现所需要的功能。
1196 0
|
自然语言处理 前端开发 安全
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
534 0
iOS-底层原理 31:LLVM编译流程 & Clang插件开发
|
Android开发 C++
ART世界探险(19) - 优化编译器的编译流程
前面,我们对于快速编译器的知识有了一点了解,对于CompilerDriver,MIRGraph等都有了初步的印象。 下面,我们回头看一下优化编译器的编译过程。
4600 0