Java 字节码的JaCoCo结果

Java 字节码的JaCoCo结果,java,code-coverage,jacoco,Java,Code Coverage,Jacoco,是否有任何方法可以查看字节码的JaCoCo结果,以便您知道哪些实际的字节码指令尚未涵盖。默认报告有些无益,因为它只说9个分支中有1个遗漏了。JaCoCo将覆盖范围映射到源行。如果您的代码非常复杂,并且每行有很多分支(如果是一行,则过度使用“?”运算符),那么这可能是不够的 如果您真的想要每个字节码的覆盖率,您可能需要以某种方式对源代码进行预处理。我想到的第一个想法是“用javap反汇编java,然后重新组装”,但现在快速搜索“java汇编程序”并没有产生任何有价值的结果 如果您的“行”不容易被测

是否有任何方法可以查看字节码的JaCoCo结果,以便您知道哪些实际的字节码指令尚未涵盖。默认报告有些无益,因为它只说9个分支中有1个遗漏了。

JaCoCo将覆盖范围映射到源行。如果您的代码非常复杂,并且每行有很多分支(如果是一行,则过度使用“?”运算符),那么这可能是不够的

如果您真的想要每个字节码的覆盖率,您可能需要以某种方式对源代码进行预处理。我想到的第一个想法是“用javap反汇编java,然后重新组装”,但现在快速搜索“java汇编程序”并没有产生任何有价值的结果


如果您的“行”不容易被测试覆盖,那么这可能表明您需要重写这段代码?

但是jacoco提供了详细的html报告。您提到的是摘要报告,单击类名,它将转换为实际的源html,并突出显示尚未涵盖的代码行。@HimanshuBhardwaj不,我没有。我谈谈详细报告。但是如果你有一个if,它检查了三个条件,而详细报告只是说错过了6个分支中的
1个,那么它在任何方面都没有帮助。查看带注释的字节码会有帮助。实际上,您希望看到包含一个或多个条件的行中各个可执行段的覆盖率。像JaCoCo这样的工具没有这个功能,而且可能永远也不会有(根据他们计划的路线图)。然而,JMockit coverage工具确实显示了单个段的覆盖率(尽管它在所有情况下还不是完美的)。啊,好吧,我最终会看一看它。罗格里奥,谢谢。我不认为a
,而(conditionA&&conditionB&&conditionC)
是太复杂的代码。但是信息
6个分支中的1个分支丢失了
,这是远远不够的。好吧,也许在这种情况下你有死代码?一个更强的检查之前?示例:虽然(it.hasNext()&&it!=null){…}Findbugs和Sonar应该能够找到这些。不,我没有。我已经找到了丢失的代码路径,并且能够将覆盖率提高到100%分支覆盖率。但是,引入日志并正确解释它是一件乏味的事情。如果我能用字节码看它,那就容易多了。您确定已在录制时完成覆盖范围到行的映射,而不是在分析
exec
文件时完成吗?因为如果信息在
exec
文件中,某些工具应该能够将其转换为报告。