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

时间:2011-07-14 19:50:36

标签: java debugging finally jdb

我有以下代码:

void func()
{
  try
  {
    f1()
  }
  finally()
  {
     if (resource != null)
       resource.close();
  }
}

我放了三个断点:在finally块中的if语句中调用f1(),f1()内部。

看来finally块中的断点没有被击中。如果在点击f1()内的断点后,我使用下一个命令,我确实最终会通过finally块。

此外,如果我在finally块的两行上放置断点,那么第一个断点确实会被击中。

不确定这是否是由于JDB中的错误造成的。有人能告诉我这是一个已知问题还是我错过了什么?

我在Linux上使用JDK 6.

1 个答案:

答案 0 :(得分:5)

我不太明白你所看到的意外行为,但JDB调试是否有问题,最后是什么,或者是否在最终内部。如果您看到跳过明显的断点,那么很可能您正在查看与正在运行的字节码不同的源代码。可以通过用

反汇编来检查字节码中的行号
javap -c -l <simple class name>

与类文件位于同一目录中。它也可以作为

运行
javap -c -l -classpath <build dir> <fully qualified class name>

它将显示每个方法包含的数字标签的所有说明。将有一个“LineNumberTable”将这些标签与源代码行号相关联。注意:每个源代码行通常有很多字节码指令。