我想问声纳能否在运行时找到由Java虚拟机引起的空指针异常?如果是,请告诉我哪个声纳法则为我们做。我非常困惑,因为声纳findbugs配置文件中存在一些规则,这些规则说声纳捕获空指针异常。
findbugs规则之一,避免引发空指针异常说,我们应该避免引发空指针异常。
请就声纳是否可以捕获空指针异常或是否不被JVM抛弃?或者它只能捕获自定义的空指针异常(由开发人员生成)以及这些声纳规则的含义(空指针异常,空指针取消引用等)。
请引导我了解这些声纳规则的真实情况。
提前致谢!!
最佳答案
是的,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中搜索这些注释,则会发现许多有关它们在各种环境中的正确用法的有用建议。
关于java - Sonar 能否动态捕获由JVM引起的空指针异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20899931/