使用Clang作爲編譯器 —— Clang 靜態分析器

Clang 靜態分析器


本文爲譯文,點擊此處查看原文。

Clang Static Analyzer是一個源代碼分析工具,它可以發現 C、C++ 和 Objective-C 程序中的 bug。它基於符號執行技術實現了路徑敏感的、過程間分析。
這是靜態分析器文檔頁面。
請參閱官方工具頁面
目前,它既可以作爲一個獨立的工具運行,也可以在Xcode中運行。獨立工具從命令行調用,並計劃與代碼庫的構建一起運行。
分析器是100%開源的,是 Clang 項目的一部分。與 Clang 的其他部分一樣,分析器被實現爲一個 C++ 庫,可以被其他工具和應用程序使用。
什麼是靜態分析?
術語“靜態分析”被合併了,但是在這裏我們使用它來表示一組用於分析源代碼以自動發現bug的算法和技術。這個想法在本質上類似於編譯器警告(這對於發現編碼錯誤是有用的),但是要更進一步,找到傳統上使用運行時調試技術(如測試)發現的bug。

在過去的幾十年裏,靜態分析bug發現工具已經從基本的語法檢查器發展到通過對代碼語義進行推理來發現深層bug的工具。Clang靜態分析器的目標是提供一個工業級的靜態分析框架,用於分析C、c++和Objective-C程序,該框架是免費可用的、可擴展的,並且具有高質量的實現。

部分Clang和LLVM
顧名思義,Clang靜態分析器構建在Clang和LLVM之上。嚴格地說,分析器是Clang的一部分,因爲Clang包含一組可重用的c++庫,用於構建強大的源代碼級工具。Clang靜態分析器使用的靜態分析引擎是一個Clang庫,能夠在不同的上下文中被不同的客戶端重用。

需要考慮的要點
雖然我們相信靜態分析器對於發現bug已經非常有用,但是我們要求您在使用它時記住幾點。

在製品
該分析儀是一個正在進行中的連續工作。爲了提高分析算法的精度和範圍,以及改進它將發現的bug的種類,計劃了許多增強功能。雖然靜態分析所能做的事情有一些基本的限制,但是在撞上這堵牆之前,我們還有很長的路要走。

慢於編譯
在操作上,使用靜態分析來自動發現程序的深層bug是用CPU時間來換取代碼的強化。由於由最先進的靜態分析工具執行的深度分析,靜態分析可能比編譯慢得多。

雖然Clang靜態分析器被設計爲儘可能快速和輕量級,但請不要期望它像編譯程序一樣快(即使啓用了優化)。在最壞的情況下,一些查找錯誤的算法需要指數時間。

Clang靜態分析器運行在合理的時間內,它不僅限定了它要做的檢查工作的數量,還使用了聰明的算法來減少它必須做的查找錯誤的工作的數量。

假陽性
靜態分析並不完美。它可以錯誤地標記代碼行爲正確的程序中的bug。由於一些代碼檢查比其他檢查需要更高的分析精度,所以在不同的檢查之間,誤報的頻率可能會有很大的差異。我們的長期目標是使分析器在所有檢查中對大多數代碼都具有較低的假陽性率。

請幫助我們在這方面的努力,報告假陽性。除非我們知道錯誤的陽性結果,否則就無法處理它們。

更多的檢查
靜態分析不是魔術;靜態分析器只能找到專門爲其設計的bug。如果您希望Clang靜態分析器找到特定類型的bug,請隨意提交特性請求或貢獻您自己的補丁。

  1. Available Checkers
    分析器執行分類爲家庭或“檢查程序”的檢查。

默認的檢查器集包括各種檢查,目的是發現安全性和API使用錯誤、死代碼和其他邏輯錯誤。查看下面的默認檢查器檢查器列表。

除此之外,分析器還包含一些實驗檢查器(也稱爲alpha檢查器)。這些檢查器正在開發中,默認情況下是關閉的。它們可能會崩潰或發出更多的誤報。

調試包包含分析器開發人員用於調試目的的檢查器。

1.1. Default Checkers

1.2. Experimental Checkers
這些checkers具有已知的問題或限制,使它們不能在默認情況下處於打開狀態。他們很可能有誤報(false positives)。Bug報告,特別是補丁是受歡迎的。
2. 開發人員文檔

2.1。調試檢查(Debug Checks)

2.2。內聯(Inlining)

2.3。初始化器列表(Initializer List)

2.4。Nullability檢查(Nullability Checks)

2.5。域存儲(Region Store)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章