Clang 是一個 C、C++ 和 Objective-C 編程語言的編譯器前端,采用了底層虛擬機(LLVM)作為其后端,提供一個GNU編譯器套裝(GCC)的替代品??死锼?middot;拉特納,在蘋果公司的贊助支持下進行開發,而源代碼授權是使用類 BSD 的開源授權。
Clang靜態分析和Instruments來剖析代碼有一些不同,Clang更致力于在編譯的過程中通過自身的一套判斷機制來找出代碼中潛在的隱患。
在XCode 3.2之后的版本里,Clang已經被集成進來,Static Analysis 是基于 Clang 的非常好的靜態代碼分析工具??梢詮膞code直接運行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內存泄露測試中,泄露少,只需進行較少的代碼改動,功能回歸工作量小。
原文轉自:http://www.anti-gravitydesign.com