Eclipse - невозможно установить точку останова из-за отсутствующих атрибутов номера строки - PullRequest
335 голосов
/ 05 июня 2009

Я получаю эту странную ошибку в Eclipse при попытке установить точку останова.

Unable to insert breakpoint Absent Line Number Information

Я установил флажок в параметрах компилятора, но не повезло.

Ответы [ 38 ]

215 голосов
/ 04 ноября 2009

У меня было то же сообщение об ошибке в Eclipse 3.4.1, SUN JVM1.6.0_07, подключенном к Tomcat 6.0 (работает в режиме отладки на другом компьютере, Sun JVM1.6.0_16, отладочное соединение работало правильно).

Окно -> Настройки -> Java -> Компилятор -> Генерация файла класса: «добавлены атрибуты номера строки в сгенерированный файл класса» проверено. Я сделал чистую, перекомпилировать. Я снял галочку, перекомпилировал, проверил, перекомпилировал. Я убедился, что проект использует глобальные настройки. Все то же сообщение.

Я перешел на сборку муравья, используя

<javac srcdir="./src/java" destdir="./bin" debug="true">

Тем не менее, то же сообщение.

Я не выяснил, что вызвало это сообщение и почему оно не исчезло. Хотя казалось, что это как-то связано с запущенным сеансом отладки Tomcat: при отключении перекомпиляция решает проблему. Но при подключении отладчика к Tomcat или при установке новых точек останова во время подключенного сеанса отладки он появился снова.

Однако оказалось, сообщение было неверным : я действительно смог отладить и установить точки останова как до, так и во время отладки ( javap -l тоже показывал номера строк ). Так что просто игнорируйте это:)

89 голосов
/ 23 августа 2009
  1. В меню Eclipse перейдите в Окно-> Настройки-> Java-> Компилятор
  2. Снять флажок «Добавить атрибуты номера строки ...»
  3. Нажмите Применить -> Да
  4. Установите флажок «Добавить атрибут номера строки ...»
  5. Применить снова.
  6. Удачной отладки
25 голосов
/ 21 января 2011

Это исправило мою проблему:

  1. Окно -> Настройки -> Сервер -> Среды выполнения
  2. Apache Tomcat -> редактировать
  3. Выберите JDK вместо JRE
16 голосов
/ 16 апреля 2015

Для Spring связанных проблем считают, что в некоторых случаях он генерирует классы "без номеров строк"; например, @Service аннотированный класс без интерфейса, добавьте интерфейс, и вы сможете отлаживать. см. здесь для полного примера.

@Service("SkillService")
public class TestServiceWithoutInterface {
   public void doSomething() {
      System.out.println("Hello TestServiceWithoutInterface");
   }
}

Служба выше будет иметь интерфейс, сгенерированный пружиной, вызывающей «пропущенные номера строк». Добавление реального интерфейса решает проблему генерации:

public interface TestService {
    void doSomething();
}

@Service("SkillService")
public class TestServiceImpl implements TestService {
   public void doSomething() {
      System.out.println("Hello TestServiceImpl");
   }
}
13 голосов
/ 23 апреля 2011

У меня есть ответ на эту проблему со стороны BlackBerry SDK: по какой-то причине, независимо от того, сколько раз я менял параметры в компиляторе, фактический базовый файл настроек не менялся.

Найдите в папке .settings вашего проекта файл с именем org.eclipse.jdt.core.prefs .

Там вы можете изменить настройки вручную:

org.eclipse.jdt.core.compiler.debug.lineNumber=generate

edit: В дополнение к этому, я заметил, что иногда я могу игнорировать предупреждение, которое дает Eclipse, и оно все равно остановится в нужном месте ... curioser и curioser ... Я положил это в корзину вещей, которые мы изучаем иметь дело с работой как dev.

8 голосов
/ 08 мая 2012

Это сработало для меня:

  1. В Window --> Preferences --> Java --> Compiler --> Classfile Generation все параметры должны быть True.
  2. Сделано debug="true" в задаче build.xml <javac>.
  3. Развертывание приложения в коте войной, созданной муравьем
  4. Перезапустил Tomcat в режиме Debug
7 голосов
/ 07 июля 2011

Не знаю, если это все еще актуально, возможно, другой моряк сочтет это полезным.

Сообщение появляется, когда файл класса скомпилирован, флаги отладки отключены.

В Eclipse вы можете включить его с помощью вышеупомянутых опций,

Окно -> Настройки -> Java -> Компилятор -> Генерация файла класса: «добавить атрибуты номера строки в сгенерированный файл класса»

Но если у вас есть JAR-файл, вы получите скомпилированный вывод. Нет простого способа решить эту проблему.

Если у вас есть доступ к источнику и вы используете ant для получения файла jar, вы можете изменить задачу ant следующим образом.

  <javac  destdir="${build.destDir}" srcdir="${build.srcDir}" source="1.6" fork="true" target="${javac.target}" debug="on" debuglevel="lines,vars,source" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m" optimize="true"   >

Счастливая отладка ..

исх: http://doc.sumy.ua/prog/Java/javanut/ch16_04.htm

4 голосов
/ 14 сентября 2015

Поскольку у меня установлено 6 разных версий Java, мне пришлось изменить соответствие JDK по умолчанию, чтобы оно соответствовало той версии Java, которую я хотел использовать. В Eclipse по умолчанию установлен уровень соответствия компилятора Java 1.7, когда все было собрано / скомпилировано с использованием Java 1.6.

Так что все, что я сделал, было

  1. В меню Eclipse перейдите в Окно-> Настройки-> Java-> Компилятор
  2. В соответствии с JDK Compliance я изменил уровень соответствия Compiler с 1,7 до 1,6

Теперь Eclipse больше не жалуется на «Невозможно вставить информацию об отсутствии номера строки точки останова», и точки останова отладки фактически работают !!!

4 голосов
/ 24 ноября 2017

Если больше ничего не работает, откройте перспективу отладки, очистите все существующие точки останова и затем установите их снова.

4 голосов
/ 15 ноября 2009

У меня была эта проблема при попытке запустить Tomcat в режиме отладки из Eclipse. У меня был файл сборки ANT, заботящийся о компиляции и развертывании. После установки флага отладки в true (как уже упоминалось в других ответах) и повторного развертывания приложения оно работало нормально:

<javac srcdir="./src/java" destdir="./bin" debug="true">

ПРИМЕЧАНИЕ: если вы только что добавили флаг отладки и перекомпилировали, вам все равно нужно повторно развернуть ваше приложение на сервере, поскольку именно здесь Eclipse отлаживает файлы классов. Совершенно очевидно, но легко потратить час или около того, почесывая голову и удивляясь, почему это не работает (поверьте мне).

...