2017-03-09 57 views
6

我想嘗試一下clang靜態分析儀。我在Windows上並使用Visual Studio構建了clang。它似乎工作,但同時它似乎是無用的。Clang靜態分析儀沒有找到最基本的問題

我做出了表率文件

example.c

int main(void) 
{ 
    int h = 0; 
    return 1/h; 
} 

調用scan-build gcc -c example.c發現任何錯誤。

example.c

int main(void) 
{ 
    int h; 
    return 1/h; 
} 

調用scan-build gcc -c example.c認定沒有錯誤。

example.c

int main(void) 
{ 
    return 1/0; 
} 

調用scan-build gcc -c example.c認定沒有錯誤。

如果找不到這些最基本的錯誤(它們可以通過clang本身找到),那麼靜態分析儀又有什麼用處呢?

我的gcc是MinGW,如果這很重要。我也試過用clang代替,但沒有任何發生。

我在這裏做錯了什麼?

+0

確實看起來該工具是純粹的廢話。根據你的測試,你不需要互聯網上的人告訴你,你已經得出這個結論。只需卸載它並獲得另一個。 – Lundin

+0

@Lundin似乎有很多項目將信仰融入到LLVM框架中。例如由Mozilla基金會支持的Rust語言。我無法想象所包含的靜態分析器是無用的。也許我錯過了一些非常基本的東西,例如一些隱藏的配置。 – CodeMonkey

+1

我還沒有使用過這個特殊的靜態分析器,但還有很多其他的。作爲一個經驗法則,總是假設它們被破壞無法修復。 – Lundin

回答

1

一定要使用build-scan -v(詳細)來查看是否實際運行鐺檢查器。 我按照這個教程 http://web.cs.ucla.edu/~tianyi.zhang/tutorial.html 當我嘗試C++的例子,它沒有顯示任何錯誤的錯誤代碼。 -v向我顯示提供的Makefile被破壞了 - 在我修復了這個clang後,仍然沒有檢測到這個bug,但是g ++顯示了這個bug。

也許他們把那個特殊的檢查關掉了。 Clang靜態分析器3.8版本 本教程使用版本3.2

+0

我卸載了Clang,因爲我無法工作,但如果我再試一次,我會盡力做到這一點。 – CodeMonkey

0

也許你沒有做正確的事。 例如,第三個例子的Visual Studio 2015年甚至拒絕與錯誤編譯:

error C2124: divide or mod by zero.

我不認爲鏘不能夠檢測之類的東西。但是,這並不重要。

我試圖檢查使用PVS-Studio的這個代碼,它檢測到的所有三個錯誤:由零

  • V609鴻溝。分母'h'== 0. MFCApplication2 mainfrm.cpp 17
  • V614使用未初始化的變量'h'。 MFCApplication2 mainfrm.cpp 23
  • V609除以零。分母 '0' == 0 MFCApplication2 MainFrm.cpp中28

因此,我建議你還是實驗。 Clang至少應該找到第三種情況。 一個實用的建議是使用更強大的工具,如PVS-Studio進行分析。順便說一下,他在Clang和GCC的finds errors

相關問題