我最近開始在我正在做的java構建中使用findbugs靜態分析工具。第一份報告帶有高優先級警告。作爲迷戀型的人,我準備好全力以赴。但是,我必須錯過一些東西。比較事情時,我會得到大部分警告。如下面的代碼:Findbugs和比較
public void setSpacesPerLevel(int value)
{
if(value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
在讀取的if語句中產生高優先級警告。
文件:Indenter.java,行:60,類型: BIT_AND_ZZ,優先順序:高度,類別: 正確性檢查,看是否((...)& 0)== 0 樣本。 Indenter.setSpacesPerLevel(int)
我將int與int進行比較,看起來像是常見的事情。我通過類似的簡單比較得到了相當多的這種類型的錯誤。
我有很多似乎是簡單代碼塊的其他高優先級警告。我在這裏錯過了什麼嗎?我意識到靜態分析可能會產生誤報,但我所看到的錯誤似乎太小而無法成爲誤報。
這個也讓我撓撓腦袋。
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
這樣做具有以下FindBugs的警告:
File: Indenter.java, Line: 160, Type: IL_INFINITE_LOOP, Priority: High, Category: CORRECTNESS
There is an apparent infinite loop in sample.Indenter.indent()
This loop doesn't seem to have a way to terminate (other than by perhaps throwing an exception).
任何想法?
所以基本上我有一些文件和50-60高優先級的警告類似於上面的。我使用的FindBugs 1.3.9從FindBugs的調用螞蟻任務
UPDATE: 我有這個版本是由哈德森服務器執行,不得不由三葉草代碼覆蓋被儀表的代碼。當我將其關閉時,所有高優先級警告都消失了。這是有道理的。感謝您的反饋。
如果您要更改循環內的spacesPerLevel,這可能是一個無限循環,例如。 spacesPerLevel = spaces + 2;或減少空間。 – Anton 2010-06-01 16:02:37
剛剛更新了包含更多代碼片段的問題 – 2010-06-01 16:06:05
您是否正在編譯調試信息? – Anton 2010-06-01 16:28:16