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