Проблема с JDB - точка останова не была достигнута - PullRequest
0 голосов
/ 14 июля 2011

У меня есть следующий фрагмент кода:

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

Я поставил три точки останова: вызов f1 (), внутри f1 (), оператор if в блоке finally.

Похоже, что точка останова в блоке finally не была достигнута.Если после достижения точки останова внутри f1 () я выполняю следующую команду, я действительно заканчиваю тем, что прохожу через блок finally.

Кроме того, если я ставлю точки останова на обе строки блока finally, точка останова действительнонажмите для первого.

Не уверен, если это из-за ошибки в JDB.Может кто-нибудь сказать мне, если это известная проблема или я что-то упустил?

Я использую JDK 6 в Linux.

1 Ответ

5 голосов
/ 30 июля 2011

Я не совсем понимаю, какое неожиданное поведение вы видите, но у JDB нет проблем с отладкой, если, наконец, или если внутри, наконец,.Если вы видите, что пропущены очевидные точки останова, то, скорее всего, вы смотрите на исходный код, который отличается от исполняемого байт-кода.Можно проверить номера строк в байт-коде, разобрав его с помощью

javap -c -l <simple class name>

в том же каталоге, что и файл класса.Его также можно запустить как

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

. Он покажет все инструкции, содержащиеся в каждом методе, с числовой меткой.Будет "LineNumberTable", которая связывает эти метки с номерами строк исходного кода.Примечание: обычно в строке исходного кода обычно много инструкций байт-кода.

...