回答
維基百科針對各種語言(包括C)維護一個list of static code analysis tools。
就我個人而言,我使用了PC-Lint
和Splint
。最好的選擇取決於你所寫的應用程序的類型。但是,無論您使用哪種工具,在正確調整工具和代碼之前,信噪比都會很低。
PC-Lint
是我用過的最強大的Lint工具。如果將其添加到現有項目中,則信噪比可能較低。但是,一旦工具和代碼被正確配置,它就可以用作標準構建過程的一部分。我使用過的最後一個重要項目,我們設置PC-Lint
警告會破壞構建。 PC-Lint的許可證價格爲389美元,但這是值得的。
Splint
是一個很好的開源工具。我在幾個項目中使用過它,但發現在使用帶有非ANSI C擴展的編譯器時(例如,在嵌入式系統項目中)配置時可能很難。
Valgrind
也值得考慮作爲動態分析工具。
您特別要求對SourceMonitor
的反饋。該工具提供了有關代碼的有趣指標,但應該用作良好Lint工具的補充,因爲它不提供這種分析。
由於在其主頁上表示,SourceMonitor
會:
...找出多少代碼,你必須和 識別的 你的模塊相對複雜。例如,您可以使用 SourceMonitor來識別最有可能包含缺陷 的代碼 ,因此需要進行正式審覈。
我在最近的項目中使用它,發現它很容易使用(即使是嵌入式系統代碼)。複雜性度量是開發代碼的一個很好的資源,它不易出錯並且易於維護。
SourceMonitor
提供了很好的輸出圖表和格式良好的XML,如果您想自動執行度量收集。唯一的缺點是該工具只能在Windows上運行。
我永遠使用PCLint,真的很喜歡它。我希望他們能夠進入C#......他們是在所有雜誌中都用C或C++代碼進行流行測試的人。
還有splint,但說實話,我從來沒有能夠得到它的工作;在我的平臺上,它確實太過於活躍。在實踐中,我最常用的「絨」是gcc
-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual
當然,我已經幾乎被遺忘以下警告標誌是什麼意思其中一半。但他們抓住了很多東西。
lint和編譯器警告之間有很大區別,因爲lint會跨模塊檢查,而編譯器只能對已編譯的源文件和包含的頭文件中的問題發出警告。 – Dipstick 2009-07-18 12:18:13
llvm clang項目中有一個http://clang-analyzer.llvm.org。我沒有嘗試過,但我打算這樣做。
它看起來相當不錯的動作: http://www.mikeash.com/?page=pyblog/friday-qa-2009-03-06-using-the-clang-static-analyzer.html 以上是Objective-C的,但它應該是C.
同我們使用PC-Lint,非常高興。
似乎有是關於消息抑制和調整幾個陣營:
- 壓制一切,然後解除壓縮只有你感興趣的
- 解除壓縮一切,然後壓制你不感興趣的警告
- 把一切都沒有抑制
我們傾向於第二類和第三類之間的某處。這確實意味着在覈心庫(大量舊代碼)中運行每lint的100MiB +文本轉儲(每行一個錯誤)。
類似於自定義工具diff
的工具會監視更改並將其發送給提交作者,這可以讓大多數人不得不將數量減少到幾行。我們通過一些基本的數據挖掘來收集關於時間誤差的有趣統計數據。
你可以得到真正在這裏打磨,超鏈接錯誤回更詳細的描述,對現有的固定預警等提供「點」 ...
- 1. 解析用於靜態分析的Objective-C代碼
- 2. Splint代碼分析儀C
- 3. 靜態代碼分析Java
- 4. 開源靜態代碼分析工具,用於C++
- 5. 靜態代碼分析與動態代碼分析工具?
- 6. 靜態代碼分析/代碼註釋
- 7. 靜態代碼分析儀,在連續的行檢測的代碼模式
- 8. 靜態/動態源代碼分析
- 9. Python中的靜態代碼分析?
- 10. SSIS的靜態代碼分析工具
- 11. Free Pascal的靜態代碼分析
- 12. 的Java靜態代碼分析
- 13. C#動態代碼分析
- 14. 類似PVS-Studio的工具用於C項目中的靜態代碼分析?
- 15. 使用Klocwork公司對於.NET靜態代碼分析
- 16. 靜態代碼分析工具jython
- 17. Eclipse CODAN靜態代碼分析
- 18. 代碼增量靜態分析工具?
- 19. 靜態代碼分析註釋
- 20. 靜態代碼分析方法
- 21. 靜態代碼分析如何工作
- 22. 靜態代碼分析工具
- 23. 編寫靜態代碼分析工具
- 24. 如何靜態分析C++和Objective-C++代碼?
- 25. Windows上的C++靜態代碼分析工具
- 26. 靜態代碼分析的C++在Linux中
- 27. Android NDK - 原生C++代碼的靜態分析
- 28. 用於C++/c共享和靜態庫的靜態分析工具
- 29. Roslyn內存代碼的靜態代碼分析
- 30. 針對C#運行源代碼級別的靜態源代碼分析
爲了擴大我的問題:有沒有人使用過SourceMonitor(http://www.campwoodsw.com/sourcemonitor.html),你會如何評價它? – Josip 2009-07-18 06:52:10
重複http://stackoverflow.com/questions/2873/choosing-a-static-code-analysis-tool? – 2009-07-18 11:36:25