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

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

Unable to insert breakpoint Absent Line Number Information

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

Ответы [ 38 ]

4 голосов
/ 06 июня 2009

Было бы полезно, если бы вы указали версию затмения, которую вы используете, и технологию (например, Java JDT, или AJDT для Aspect Java, или C ++ CDT).

Что касается Java, то я полагаю, что ваш "галочка из опций компилятора" относится к this

В «Window --> Preferences --> Java --> Compiler --> Classfile Generation» для всех параметров генерации «Class file» установлено значение «Истина»:

  • (1) добавить переменные атрибуты,
  • (2) номера addline,
  • (3) добавить имя исходного файла,
  • (4) сохранить неиспользуемые локальные переменные.

Проверено ли в вашем проекте только на глобальном уровне (настройки Windows) или на уровне проекта?

А вы уверены, что открытый класс (на котором вы пытаетесь установить точку останова):

  • является одним из ваших источников (а не из сторонней библиотеки)
  • это .java, а не .class?

Попробуйте очистить все и восстановить все, проверьте на наличие возможных конфликтов jar .

3 голосов
/ 19 марта 2013

попробуйте изменить jre, который вы используете. Вместо этого установите jre в папке JDK.

3 голосов
/ 26 августа 2017

Я испробовал здесь практически все решения, но не повезло. Вы пытались нажать "Не говори мне больше"? После этого я перезапустил свою программу, и все было хорошо. Затмение достигло моей точки останова, как будто ничего не случилось.

Основной причиной для меня было то, что Eclipse пытался настроить отладку для автоматически сгенерированных прокси-объектов Spring CGLIB. Если вам не нужно что-то отлаживать на этом уровне, вы должны игнорировать проблему.

2 голосов
/ 15 апреля 2013

Получил это сообщение с Spring AOP (похоже, из библиотеки CGLIB) Нажав Игнорировать, кажется, работает нормально, я все еще могу отладить.

2 голосов
/ 04 июля 2012

У меня была такая же проблема, когда я делал на Jetty-сервере и компилировал новый .war-файл с помощью ANT. Вы должны сделать ту же версию компилятора jdk / jre и путь сборки (например, jdk 1.6v33, jdk 1.7, ....) после того, как вы установите Java Compiler, как было написано ранее.

Я сделал все и до сих пор не работает. Решением было удалить скомпилированные файлы .class и цель сгенерированного файла war, и теперь он работает :)

2 голосов
/ 29 мая 2011

Моя ситуация была похожа:

  • Я отлаживал тест JUnit
  • Я использовал Mockito для создания шпиона, как в spyTask = spy(new Task())
  • Я поставил точку останова внутри класса, за которым я шпионил (внутри Task.java)

Эта точка останова генерирует соответствующую ошибку каждый раз, когда я запускаю Debug As... > JUnit Test

Чтобы решить проблему, я переместил точку останова «вверх» в реальный тест (внутри TaskTest.java). После того, как выполнение остановилось, я добавил точку останова обратно туда, где она была у меня изначально (внутри Task.java).

Я все еще получаю ту же ошибку, но после нажатия «ОК» точка останова сработала просто отлично.

Надеюсь, что кому-то поможет,

-gmale

2 голосов
/ 12 мая 2014

Я нашел еще одну причину для этого сообщения. Я программировал Scala. Решение было:

  1. Открыть Выполнить -> Отладка конфигурации
  2. В нижней части вкладки «Main», рядом с кнопками «Apply» и «Revert», находится текст, указывающий, какой Launcher вы используете, а рядом с ним есть гиперссылка «Select other». Это странный элемент пользовательского интерфейса, на первый взгляд не очень действенный.
  3. Используйте ссылку «Выбрать другое» и выберите «Средство запуска приложения Scala (новый отладчик)». Другой, похоже, не работает со Scala.

Теперь отладка должна работать. Обратите внимание, что я установил плагин Scala IDE, эта опция может быть недоступна, если у вас ее нет.

1 голос
/ 10 июля 2015

Как только я столкнулся с той же ошибкой при использовании junit и Mockito, я забыл добавить @PrepareForTest для статического класса.

Добавьте ниже код исправил мою проблему.

@PrepareForTest({XXXXX.class})

Не уверен, что это был тот же случай.

1 голос
/ 17 декабря 2009

У меня была такая же проблема при отладке WAR (созданного из нескольких артефактов проекта Eclipse), развернутого в Tomcat.

Я строю все, используя скрипт сборки ANT. Если это то, что вы делаете, убедитесь, что флаг debug = true установлен на каждой вашей задаче javac ant. Это была моя единственная проблема - надеюсь, это поможет вашей проблеме!

1 голос
/ 01 сентября 2017

Это подробно объясняется здесь:

https://github.com/spring-projects/spring-ide/issues/78

Только для справки в будущем, это релевантная часть ответа (игнорируйте тот факт, что относится к приложению Spring Boot, поведение такое же для многих других случаев):

Всякий раз, когда вы устанавливаете точку останова в Eclipse / STS, IDE пытается установить точку останова в ВМ, если вы запускаете приложение. Это то, что происходит в вашем случае, когда вы запускаете загрузочное приложение в режиме отладки.

Для каждого класса, который загружается в JVM, IDE проверяет, нужно ли ему устанавливать точку останова или нет. Если он решит установить точку останова, попытка сделает это (используя информацию из определения точки останова в IDE, включая ее номер строки, поскольку обычно вы устанавливаете точки останова строки в исходном файле в данной строке).

Это решение (устанавливать точку останова для данного загруженного класса или нет) проверяет типы, для которых вы устанавливаете точку останова, включающие типы и внутренние классы. Это гарантирует, что точки останова для внутренних классов (даже анонимных внутренних классов) установлены в JVM (и не игнорируются).

Spring Boot генерирует внутренний класс для вашего контроллера во время выполнения (это сгенерированный CGLIB внутренний класс, который появляется в сообщении об ошибке). Когда JVM загружает этот класс, он пытается установить точку останова номера строки вмещающего типа (для этого внутреннего класса). Поскольку сгенерированный внутренний класс не имеет никакой информации о номере строки (ему не нужно иметь информацию о номере строки), установка точки останова для этого внутреннего класса завершается неудачно с упомянутым сообщением об ошибке.

Когда среда IDE загружает тип включения (сам класс вашего контроллера), она также пытается установить точку останова линии и успешно с этим справляется. Это визуализируется с помощью контрольного маркера на маркере точки останова.

Поэтому вы можете смело игнорировать появившееся сообщение об ошибке. Чтобы это сообщение об ошибке не отображалось, вы можете перейти к настройкам (Java -> Debug) и отключить «Предупредить при невозможности установить точку останова из-за отсутствующих атрибутов номера строки».

...