Infer簡介:
Facebook開源了適用于分析C烛缔、Java和Objective-C代碼的靜態(tài)分析工具Infer馏段。
Infer是Facebook的開發(fā)團(tuán)隊在代碼提交內(nèi)部評審時院喜,用來執(zhí)行增量分析的一款靜態(tài)分析工具,在代碼提交到代碼庫或者部署到用戶的設(shè)備之前找出bug晕翠。由OCaml語言編寫的Infer目前能檢測出空指針訪問淋肾、資源泄露以及內(nèi)存泄露硫麻,可對C樊卓、Java或Objective-C代碼進(jìn)行檢測。Facebook使用Infer自動驗證iOS和安卓上的移動應(yīng)用的代碼碌尔,bug報告的正確率達(dá)80%。
Infer通過捕獲編譯命令唾戚,把要被編譯的文件轉(zhuǎn)換為可用于分析潛在錯誤的中間語言格式。整個過程是增量進(jìn)行的膳灶,意味著通常只有那些有修改過并提交編譯的文件才會被Infer分析。Infer還集成了大量的構(gòu)建或編譯工具轧钓,包括Gradle、Maven锐膜、Buck道盏、Xcodebuild而柑、clang媒咳、make和javac。
掃描的Bug類型:(針對Java來說)
Context leak:這個錯誤類型是針對Android的涩澡。在Android應(yīng)用程序中坠敷,Context的子類(除了應(yīng)用程序妙同,這是一個特殊的情況)是短暫的組件,可以在Android框架中被創(chuàng)建和銷毀粥帚。一旦框架決定銷毀一個Context,它不能再次使用柴灯,應(yīng)該被垃圾收集器釋放。然而拖陆,程序員在它已被銷毀后保留了Context懊亡,會創(chuàng)建一個內(nèi)存泄漏依啰。
Null dereference:Java/OC/C都會報告空引用的問題店枣,當(dāng)一個對象聲明后速警,沒有初始化鸯两,就被引用了闷旧,這個時候會報空指針錯誤钧唐。
Resource leak:資源泄漏的問題在Java/C/OC都存在忙灼,資源代表文件,sockets,連接等等该园,使用后需要關(guān)閉。
Tained value reaching sensitive function:此錯誤類型對應(yīng)于安全或隱私問題帅韧。當(dāng)不安全的數(shù)據(jù)流向敏感的方法時,一個安全漏洞會被報告時(例如忽舟,閱讀一些主機(jī)名未驗證的SSLSocket)。當(dāng)秘密數(shù)據(jù)流向一個可能向外界泄漏值的方法時叮阅,(例如刁品,用戶數(shù)據(jù)流從SharedPreferences記錄功能)浩姥,一個安全類的bug就出現(xiàn)了
Infer安裝:
在mac上哑诊,最簡單的方法是用brew來安裝及刻。
首先確保你的brew是最新的镀裤,可以brew update 一下。
然后brew install infer暑劝,坐等就可以了骆莹。
命令行調(diào)用:
infer -- ./gradlew clean deployOnlineRelease -PdisablePreDex
命令執(zhí)行成功的前提是本地的android環(huán)境ok担猛,可以本地打包成功幕垦,這個需要事先保證好