【问题标题】:ERROR - Could not complete symbolic execution: reached limit of 10000 steps错误 - 无法完成符号执行:已达到 10000 步的限制
【发布时间】:2016-03-08 01:13:36
【问题描述】:

使用 SonarQube 5.2 分析与使用 SonarQube 5.1.2 相同的项目时,我在分析 Java 源时在日志中看到很多此类错误消息:

ERROR - Could not complete symbolic execution: reached limit of 10000 steps for method updateAll in class DefaultTypeDefinitions

这些错误消息在之前的 SonarQube 5.1.2 版本中没有出现。

不过,SonarQube 5.2 的分析结果最终似乎还可以。

但是这些错误信息让我很警觉。我不明白怎么了。你能帮忙澄清一下吗?

【问题讨论】:

  • 我们今天将 java 插件更新到 3.8 后看到了同样的情况。声纳 4.5.6 LTS
  • java 插件升级到 3.8 后与 5.1.2 相同
  • 由于这是由 java 插件 3.8 记录的内容,因此在使用此版本的每个 SonarQube 平台版本上都会发生。

标签: sonarqube


【解决方案1】:

当您使用 sonar-java 插件 3.8 运行分析时,由于此版本引入了新的符号执行引擎,此错误消息实际上是完全正常的并且是预期的。

(所以最后这不应该是错误消息,而是仅在调试模式下可见的内容:https://jira.sonarsource.com/browse/SONARJAVA-1406 这应该在 Java 插件的下一个版本中修复)。

这对您的分析无害。

这是什么意思?

对于两个规则(S2259 关于空指针异常和S2583 关于条件始终为真或假),我们使用 符号执行 探索方法的所有可能状态来查找问题。这最终探索了一个可能状态的大图(此处过于简单,但足以解释)。

这种探索可能是巨大的,因此它有一个任意的限制:10 000 步。因此,当我们无法完成符号执行时,我们会记录此消息。

具体来说:这是一种相当间接的方式来警告您有关此方法的这两个规则的一些潜在误报。

【讨论】:

  • 感谢您的回答!然而,“条件总是对或错”的规则似乎会产生很多误报。不幸的是,我不能在这里发布一个例子,因为这个论坛阻止它。
  • 您可以通过 sonarqube@googlegroups.com 与我们联系,讨论误报问题。如果它涉及 try/catch/finally :我们已经知道了,请参阅:stackoverflow.com/questions/34063605/…jira.sonarsource.com/browse/SONARJAVA-1295
  • 我昨天忘记了接受答案按钮在哪里,现在我找到了。是的,至少这些误报中的许多似乎与 try/catch/finally 有关。这是一个非常酷的规则,所以如果它在修复后能完美运行,那就太好了。
  • 如果不是错误,肯定不应该记录为错误?
  • 这就是创建票证的原因,它应该在即将发布的 SonarQube java 插件版本中得到修复。请仔细阅读答案,因为我明确指出这不应该是错误消息)。
猜你喜欢
  • 2017-06-16
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
相关资源
最近更新 更多