在代碼還沒有真正跑起來的時候,可以利用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