从Java字节码中的if条件,如何知道采用了哪个分支(真/假)?

从Java字节码中的if条件,如何知道采用了哪个分支(真/假)?,java,java-bytecode-asm,Java,Java Bytecode Asm,我有一个小程序和java字节码 test.passfail.pass_or_fail:19 ILOAD 0 test.passfail.pass_or_fail:19 ILOAD 1 test.passfail.pass_or_fail:19 IF_ICMPLE L0 test.passfail.pass_or_fail:20 ICONST_1 test.passfail.pass_or_fail:20 ISTORE 2 test.passfail.pass_or_fail:25 ILOAD 2

我有一个小程序和java字节码

test.passfail.pass_or_fail:19 ILOAD 0
test.passfail.pass_or_fail:19 ILOAD 1
test.passfail.pass_or_fail:19 IF_ICMPLE L0
test.passfail.pass_or_fail:20 ICONST_1
test.passfail.pass_or_fail:20 ISTORE 2
test.passfail.pass_or_fail:25 ILOAD 2
test.passfail.pass_or_fail:25 ICONST_1
test.passfail.pass_or_fail:25 IF_ICMPNE L2
test.passfail.pass_or_fail:25 ILOAD 0
test.passfail.pass_or_fail:25 BIPUSH 80
test.passfail.pass_or_fail:25 IF_ICMPLE L2

您可以在第19行和第25行中看到条件,我的问题是,了解哪个分支(对还是错)看到此跟踪的最佳方法是什么?

我不完全清楚您问的是什么,或者“第25行执行两次”是什么意思。很抱歉,不清楚,我将再次编辑此问题,所以问题是,如果我从字节码中收集一个动态跟踪,我如何知道哪个分支(真/假)是从一个条件中获取的?因此,如果我看到test.passfail.pass\u或\u fail:19如果Icple L0,如何知道看到字节码跟踪时是否会采用true of false分支?如何“收集动态跟踪”以及该输出的含义是什么?我使用了一个切片工具,这是一个基于某些标准的切片。这并不能解释该输出的含义。一个有根据的猜测是,指令前的数字是源代码行号,这是没有帮助的,因为条件可以放在一行中。然后,在说明中使用了L0和L2等标签,但遇到时未打印。或者,这些分支都没有执行,或者您的工具在遇到相应的代码位置时没有打印标签。在后一种情况下,无法确定是否从该输出中获取了分支。