面对JDB的问题-断点没有被击中



我有以下一段代码:

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"将这些标签与源代码行号关联起来。注意:每行源代码通常有许多字节码指令。

最新更新