【问题标题】:Can sonar catch null pointer exceptions caused by JVM Dynamicallysonar能否动态捕捉JVM引起的空指针异常
【发布时间】:2014-01-20 21:40:56
【问题描述】:

请问sonar能在运行时发现java虚拟机造成的空指针异常吗??如果是,请告诉我哪个声纳规则适合我们。我对此感到非常困惑,因为声纳 findbugs 配置文件中存在一些规则,即声纳捕获空指针异常。 findbugs 规则之一 Avoid Throwing Null Pointer Exception 说我们应该避免抛出空指针异常。

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

【问题讨论】:

    标签: java sonarqube findbugs


    【解决方案1】:

    是的,Sonar 可以通过后台使用 FindBugs 工具检测 JVM 抛出的 NullPointerExceptions (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 中搜索这些注释,您会发现很多有用的建议,说明它们在各种环境中的正确用法。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      相关资源
      最近更新 更多