声纳可以捕捉由JVM动态引起的空指针异常

时间:2014-01-03 08:59:29

标签: java sonarqube findbugs

我想问一下声纳可以在运行时找到java虚拟机引起的空指针异常吗?如果是,请告诉我哪个声纳规则为我们做了。我非常困惑,因为声纳findbugs配置文件中存在一些规则,即声纳捕获空指针异常。 其中一个findbugs规则避免抛出空指针异常说我们应该避免抛出空指针异常。

请澄清一下,声纳可以捕获空指针异常还是不被JVM抛出?或者它只能捕获自定义的空指针异常(由开发人员生成)以及这些声纳规则的含义(空指针异常,空指针取消引用等)。

请指导我了解这些声纳规则的真实情况。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

是的,Sonar可以使用引擎盖下的FindBugs工具检测JVM抛出的NullPointerException(NPE)。但是,它可以在运行时动态执行,因为FindBugs是static analysis tool

FindBugs detectors,选择其密钥中带有NP_前缀的用户,例如NP_ALWAYS_NULL。大约有30个这样的探测器处理空指针分析。

请注意,FindBugs通过代码的静态分析工作。换句话说,它不会动态“捕获”NPE或以某种方式执行代码的模拟运行并“捕获”NPE。这很难做到,因为每个可能的代码路径都需要测试用例。相反,FindBugs仅使用其探测器分析类文件  因此,您不会发现所有可能发生NPE的情况,但由于检测器数量庞大,您将获得最多。此外,该领域的一些FindBugs探测器非常复杂,即使总有改进的余地。

另请注意,为了帮助探测器完成工作,您可能需要注释方法参数并使用null pointer analysis annotations(也是in JSR305 here)返回值。如果您搜索SO以获取这些注释,您会发现许多有关它们在各种环境中正确使用的有用建议。