我有以下代码:
void func()
{
try
{
f1()
}
finally()
{
if (resource != null)
resource.close();
}
}
我放了三个断点:在finally块中的if语句中调用f1(),f1()内部。
看来finally块中的断点没有被击中。如果在点击f1()内的断点后,我使用下一个命令,我确实最终会通过finally块。
此外,如果我在finally块的两行上放置断点,那么第一个断点确实会被击中。
不确定这是否是由于JDB中的错误造成的。有人能告诉我这是一个已知问题还是我错过了什么?
我在Linux上使用JDK 6.
答案 0 :(得分:5)
我不太明白你所看到的意外行为,但JDB调试是否有问题,最后是什么,或者是否在最终内部。如果您看到跳过明显的断点,那么很可能您正在查看与正在运行的字节码不同的源代码。可以通过用
反汇编来检查字节码中的行号javap -c -l <simple class name>
与类文件位于同一目录中。它也可以作为
运行javap -c -l -classpath <build dir> <fully qualified class name>
它将显示每个方法包含的数字标签的所有说明。将有一个“LineNumberTable”将这些标签与源代码行号相关联。注意:每个源代码行通常有很多字节码指令。