請問sonar能否在運(yùn)行時發(fā)現(xiàn)java虛擬機(jī)引起的空指針異常??如果是,請告訴我哪個聲納規(guī)則為我們做的。我對此感到非常困惑,因為聲納 findbugs 配置文件中存在一些規(guī)則,這些規(guī)則說聲納捕獲空指針異常。findbugs 規(guī)則之一Avoid Throwing Null Pointer Exception說我們應(yīng)該避免拋出空指針異常。
ps.請澄清一下聲納可以捕獲空指針異常還是由 JVM 拋出?或者它只能捕獲自定義的空指針異常(由開發(fā)人員生成)以及這些聲納規(guī)則的含義(空指針異常、空指針取消引用等)。使用聲納的規(guī)則是什么?
NullPointerException
是的,Sonar 可以通過使用引擎蓋下的 FindBugs 工具來檢測JVM 拋出的 s (NPE)。但是,它不能在運(yùn)行時動態(tài)地這樣做,因為 FindBugs 是一個靜態(tài)分析工具。
從FindBugs 檢測器中,選擇NP_
其鍵中帶有前綴的檢測器,例如NP_ALWAYS_NULL
. 大約有 30 個這樣的檢測器處理空指針分析。
請注意,F(xiàn)indBugs 通過代碼的靜態(tài)分析來工作。換句話說,它不會動態(tài)地“捕獲”NPE 或以某種方式執(zhí)行代碼的模擬運(yùn)行并“捕獲”NPE。這很難做到,因為每個可能的代碼路徑都需要測試用例。相反,F(xiàn)indBugs 僅使用其檢測器分析類文件。
因此,您不會找到所有可能發(fā)生 NPE 的情況,但由于檢測器的絕對數(shù)量,您將捕獲最多。此外,該領(lǐng)域的一些 FindBugs 檢測器非常復(fù)雜,盡管總有改進(jìn)的余地。
另請注意,為了幫助檢測器完成其工作,您可能必須使用空指針分析注釋來注釋方法參數(shù)和返回值(也在此處的 JSR305 中)。如果你在 SO 中搜索這些注解,你會發(fā)現(xiàn)很多關(guān)于它們在各種環(huán)境中正確使用的有用建議。文章來源:http://www.zghlxwxcb.cn/article/263.html
文章來源地址http://www.zghlxwxcb.cn/article/263.html
到此這篇關(guān)于sonar能否動態(tài)捕獲JVM引起的空指針異常的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!