07 | Clang、Infer 和 OCLint ,我們應(yīng)該使用誰來做靜態(tài)分析?

靜態(tài)分析,這種可以幫助我們?cè)诰帉懘a的階段就能及時(shí)發(fā)現(xiàn)代碼錯(cuò)誤,從而在根兒上保證工程質(zhì)量的技術(shù),就成為了iOS開發(fā)者最常用到的一種代碼調(diào)試技術(shù)。
1.Xcode 自帶的靜態(tài)分析工具 Analyze
2.第三方靜態(tài)編譯器:OCLint、Infer、Clang靜態(tài)分析器

OCLint
OCLint 是基于 Clang Tooling 開發(fā)的靜態(tài)分析工具,主要用來發(fā)現(xiàn)編譯器檢查不到的那些潛在的關(guān)鍵技術(shù)問題。

Clang 靜態(tài)分析器
Clang 靜態(tài)分析器(Clang Static Analyzer)是一個(gè)用 C++ 開發(fā)的,用來分析 C、C++ 和 Objective-C 的開源工具,是 Clang 項(xiàng)目的一部分,構(gòu)建在 Clang 和 LLVM 之上。Clang 靜態(tài)分析器的分析引擎用的就是 Clang 的庫(kù)。

Infer 的工作流程圖如下:

image.png

小結(jié)
在今天這篇文章中,我和你一一分析了Clang 靜態(tài)分析器、Infer和OCLint 這三個(gè) iOS 靜態(tài)分析工具。對(duì)于 iOS 的靜態(tài)分析,這三個(gè)工具都是基于 Clang 庫(kù)開發(fā)的。

其中 Clang 靜態(tài)分析器和 Xcode的集成度高,也支持命令行。不過,它們檢查的規(guī)則少,基本都是只能檢查出較大的問題,比如類型轉(zhuǎn)換問題,而對(duì)內(nèi)存泄露問題檢查的側(cè)重點(diǎn)則在于可用性。

OCLint 檢查規(guī)則多、定制性強(qiáng),能夠發(fā)現(xiàn)很多潛在問題。但缺點(diǎn)也是檢查規(guī)則太多,反而容易找不到重點(diǎn);可定制度過高,導(dǎo)致易用性變差。

Infer 的效率高,支持增量分析,可小范圍分析??啥ㄖ菩圆凰阕顝?qiáng),屬于中等。

綜合來看,Infer 在準(zhǔn)確性、性能效率、規(guī)則、擴(kuò)展性、易用性整體度上的把握是做得最好的,我認(rèn)為這些是決定靜態(tài)分析器好不好最重要的幾點(diǎn)。所以,我比較推薦的是使用 Infer 來進(jìn)行代碼靜態(tài)分析。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容