2009-07-17 31 views
10

您使用哪種靜態代碼分析儀(如果有)?我一直在使用Python的PyLint,對此我感到非常滿意,現在我需要類似於C代碼的東西。用於C的靜態代碼分析儀

您需要抑制正常日常使用量的多少輸出?

+0

爲了擴大我的問題:有沒有人使用過SourceMonitor(http://www.campwoodsw.com/sourcemonitor.html),你會如何評價它? – Josip 2009-07-18 06:52:10

+1

重複http://stackoverflow.com/questions/2873/choosing-a-static-code-analysis-tool? – 2009-07-18 11:36:25

回答

14

維基百科針對各種語言(包括C)維護一個list of static code analysis tools

就我個人而言,我使用了PC-LintSplint。最好的選擇取決於你所寫的應用程序的類型。但是,無論您使用哪種工具,在正確調整工具和代碼之前,信噪比都會很低。

PC-Lint是我用過的最強大的Lint工具。如果將其添加到現有項目中,則信噪比可能較低。但是,一旦工具和代碼被正確配置,它就可以用作標準構建過程的一部分。我使用過的最後一個重要項目,我們設置PC-Lint警告會破壞構建。 PC-Lint的許可證價格爲389美元,但這是值得的。

Splint是一個很好的開源工具。我在幾個項目中使用過它,但發現在使用帶有非ANSI C擴展的編譯器時(例如,在嵌入式系統項目中)配置時可能很難。

Valgrind也值得考慮作爲動態分析工具。


您特別要求對SourceMonitor的反饋。該工具提供了有關代碼的有趣指標,但應該用作良好Lint工具的補充,因爲它不提供這種分析。

由於在其主頁上表示,SourceMonitor會:

...找出多少代碼,你必須和 識別的 你的模塊相對複雜。例如,您可以使用 SourceMonitor來識別最有可能包含缺陷 的代碼 ,因此需要進行正式審覈。

我在最近的項目中使用它,發現它很容易使用(即使是嵌入式系統代碼)。複雜性度量是開發代碼的一個很好的資源,它不易出錯並且易於維護。

SourceMonitor提供了很好的輸出圖表和格式良好的XML,如果您想自動執行度量收集。唯一的缺點是該工具只能在Windows上運行。

0

我永遠使用PCLint,真的很喜歡它。我希望他們能夠進入C#......他們是在所有雜誌中都用C或C++代碼進行流行測試的人。

3

還有splint,但說實話,我從來沒有能夠得到它的工作;在我的平臺上,它確實太過於活躍。在實踐中,我最常用的「絨」是gcc

-std=c89 -pedantic -W -Wall -Wstrict-prototypes -Wunreachable-code -Wwrite-strings -Wpointer-arith -Wbad-function-cast -Wcast-align -Wcast-qual 

當然,我已經幾乎被遺忘以下警告標誌是什麼意思其中一半。但他們抓住了很多東西。

+0

lint和編譯器警告之間有很大區別,因爲lint會跨模塊檢查,而編譯器只能對已編譯的源文件和包含的頭文件中的問題發出警告。 – Dipstick 2009-07-18 12:18:13

5

同我們使用PC-Lint,非常高興。

似乎有是關於消息抑制和調整幾個陣營:

  • 壓制一切,然後解除壓縮只有你感興趣的
  • 解除壓縮一切,然後壓制你不感興趣的警告
  • 把一切都沒有抑制

我們傾向於第二類和第三類之間的某處。這確實意味着在覈心庫(大量舊代碼)中運行每lint的100MiB +文本轉儲(每行一個錯誤)。

類似於自定義工具diff的工具會監視更改並將其發送給提交作者,這可以讓大多數人不得不將數量減少到幾行。我們通過一些基本的數據挖掘來收集關於時間誤差的有趣統計數據。

你可以得到真正在這裏打磨,超鏈接錯誤回更詳細的描述,對現有的固定預警等提供「點」 ...

1

我戴維埃文斯的工作的大風扇上LC/Lint,顯然它的名字已改爲Splint。它非常具有侵略性,您可以通過向代碼添加註釋來告訴它很多有用的信息。 它被設計成與程序員註釋一起使用。它將在沒有它們的情況下運行,但是如果您嘗試將它用作簡單的檢查器而不提供任何註釋,那麼您可能會感到失望。如果 你想要的是完全自動檢查,並且如果你可以處理一個僅限Windows的工具,那麼最好用Gimpel的PC-Lint。 Jim Gimpel擁有超過25個 年的滿意顧客。