【问题标题】:Facing Issue with JDB - Breakpoint not being hitJDB面临的问题 - 断点未命中
【发布时间】:2011-07-14 19:50:36
【问题描述】:

我有以下代码:

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

我设置了三个断点:调用 f1(),在 f1() 中,在 finally 块中的 if 语句上。

似乎 finally 块中的断点没有被命中。如果在 f1() 中遇到断点后,我使用下一个命令,我确实会通过 finally 块。

此外,如果我在 finally 块的两行都设置断点,则断点确实会命中第一个。

不确定这是否是由于 JDB 中的错误。有人可以告诉我这是一个已知问题还是我遗漏了什么?

我在 Linux 上使用 JDK 6。

【问题讨论】:

  • 您需要发布一个更完整的示例。这太短了,显然是人为的,而且有问题。
  • 我在执行专有代码时看到了这个错误。我怀疑我是否能够用一个独立的例子来重现它。

标签: java debugging finally jdb


【解决方案1】:

我不太明白您看到了什么意外行为,但是 JDB 调试 if's、finally's 或 if's inside of finally's 没有问题。如果您看到明显的断点被跳过,那么您很可能正在查看与正在运行的字节码不同的源代码。可以通过反汇编来检查字节码中的行号

javap -c -l <simple class name>

在与类文件相同的目录中。它也可以运行为

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 2014-08-12
    • 1970-01-01
    • 2011-08-28
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多