Я отримую цю дивну помилку в Eclipse під час спроби встановити точку перерви.
Unable to insert breakpoint Absent Line Number Information
Я поставив галочку від параметрів компілятора, але не пощастило.
Я отримую цю дивну помилку в Eclipse під час спроби встановити точку перерви.
Unable to insert breakpoint Absent Line Number Information
Я поставив галочку від параметрів компілятора, але не пощастило.
Відповіді:
У мене було те саме повідомлення про помилку в 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 теж показував номери рядків). Тож просто ігноруйте це :)
debug="true"
до javac
завдання ant
сценарію збірки спрацювало.
Це вирішило мою проблему:
Installed JREs
JDK
JRE
Для питань, пов’язаних з весною, вважають, що в деяких випадках він генерує класи "без номерів рядків"; наприклад, @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");
}
}
У мене є відповідь на цю проблему з боку речей BlackBerry SDK: Чомусь, незалежно від того, скільки разів я змінював параметри компілятора, фактичний базовий файл налаштувань не змінювався.
Подивіться у папку .settings свого проекту файл, який називається org.eclipse.jdt.core.prefs .
Там ви можете змінити налаштування вручну:
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
редагувати: Надалі, я помітив, що іноді я можу ігнорувати попередження, яке надає Eclipse, і воно все одно зупиниться в потрібному місці ... цікавець і курйоз ... Я кладу це у відро речей, з якими ми вчимося мати справу при роботі як розробник.
Це працювало для мене:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, всі варіанти повинні бути True
.debug="true"
у <javac>
завданні build.xml .Debug
режиміНе знаєте, чи це все-таки актуально, можливо, інший моряк знайде це корисним.
Повідомлення з'являється, коли у файлі класу зібраний прапор налагодження вимкнено.
У затемненні ви можете увімкнути його за допомогою вищезазначених параметрів,
Вікно -> Налаштування -> Java -> Компілятор -> Генерація классових файлів: "додати атрибути номера рядка до створеного файлу класу"
Але якщо у вас є файл jar, то ви отримаєте складений вихід. Немає простого способу виправити цю проблему.
Якщо у вас є доступ до джерела і використовуєте мурашник для отримання файлу jar, ви можете змінити завдання мурашки таким чином.
<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" >
Щаслива налагодження ..
Я пробував тут майже кожне рішення і не пощастило. Ви спробували натиснути "Не кажіть мені більше"? Після цього я перезапустив свою програму і все було добре. Затемнення вдарило мою точку розриву так, ніби нічого не було.
Першопричиною для мене було Eclipse, що намагався встановити налагодження для автоматично створених проксі-об'єктів Spring CGLIB. Якщо вам не потрібно щось налагоджувати на цьому рівні, ви повинні ігнорувати проблему.
Це допоможе, якби ви вказали версію затемнення, яку ви використовуєте, та технологію (Java JDT, або AJDT для Aspect Java, наприклад, C ++ CDT).
З боку Java, я вважаю, що ваше "Позначено прапорець із параметрів компілятора" посилається на це
У розділі " Window --> Preferences --> Java --> Compiler --> Classfile Generation
" для всіх Class file
параметрів генерації встановлено значення True:
Чи перевіряється ваш проект лише на глобальному рівні (Налаштування Windows) або на рівні конкретного проекту?
А ви впевнені, що клас відкрився (на якому ви намагаєтесь встановити точку перерви):
.java
не .class
?Спробуйте все очистити та відновити все, перевірити можливі конфлікти з банком .
У мене була ця проблема під час спроби запустити Tomcat в режимі налагодження з Eclipse. У мене був файл збірки ANT, який піклується про компіляцію та розгортання. Після встановлення прапора налагодження в істинному (як зазначено в інших відповідях) та повторному застосуванні програми він працював чудово:
<javac srcdir="./src/java" destdir="./bin" debug="true">
ПРИМІТКА. Якщо ви тільки що додали прапор налагодження та перекомпілювали, вам все одно потрібно переукласти свою програму на сервер, оскільки саме тут Eclipse налагоджує файли класу. Дуже очевидно, але легко витратити годину або близько, чухаючи голову і цікавившись, чому це не працює (повірте мені).
Оскільки в мене встановлено 6 різних версій Java, мені довелося змінити відповідність JDK за замовчуванням, щоб відповідати версії Java, яку я хотів використовувати. Eclipse за замовчуванням мав рівень відповідності компілятора, встановлений на Java 1.7, коли все було побудовано / складено за допомогою Java 1.6.
Так що все, що я робив, було
Тепер Eclipse більше не скаржиться на "Неможливо вставити інформацію про точку останова" Відсутня інформація про номер рядка ", і точки налагодження налагодження фактично працюють !!!
Це детально пояснено тут:
https://github.com/spring-projects/spring-ide/isissue/78
Тільки для подальшого ознайомлення це відповідна частина відповіді (ігноруйте той факт, що стосується програми Spring Boot, поведінка однакова для багатьох інших випадків):
Кожного разу, коли ви встановлюєте точку розриву в Eclipse / STS, IDE намагається встановити точку розриву в VM, якщо запустити додаток. Це те, що відбувається у вашому випадку, коли ви запускаєте додаток для завантаження в режимі налагодження.
Для кожного класу, який завантажується в JVM, IDE перевіряє, чи потрібно йому встановити точку розриву чи ні. Якщо він вирішив встановити точку розриву, намагається це зробити (використовуючи інформацію з визначення точки розриву в IDE, включаючи його номер рядка, оскільки ви зазвичай встановлюєте точки перерви рядка у вихідному файлі у заданому рядку).
Це рішення (незалежно від того, встановити точку розриву для заданого завантаженого класу чи ні) перевіряє типи, на які ви встановлюєте точку розриву, типи, що включаються, та внутрішні класи. Це гарантує, що точки перерви для внутрішніх класів (навіть анонімні внутрішні класи) встановлюються в JVM (і не ігноруються).
Spring Boot створює внутрішній клас для вашого контролера під час виконання (це внутрішній клас, створений CGLIB, який відображається в повідомленні про помилку). Коли JVM завантажує цей клас, він намагається встановити точку розриву номера рядка типу, що додається (для цього внутрішнього класу). Оскільки в створеному внутрішньому класі немає жодної інформації про номер рядка (не потрібно мати інформацію про номер рядка), встановлення точки перерви для цього внутрішнього класу не вдається згаданим повідомленням про помилку.
Коли IDE завантажує тип корпусу (сам клас контролера), він також намагається встановити точку розриву лінії і досягає успіху в цьому. Це візуалізується галочкою на маркері точки розриву.
Тому ви можете сміливо ігнорувати повідомлення про помилку, яке з’являється. Щоб уникнути появи цього повідомлення про помилку, ви можете перейти до налаштувань (Java -> Налагодження) та відключити "Попереджати, коли не вдається встановити точку розриву через відсутні атрибути номера рядка".
Моя ситуація була схожа:
spyTask = spy(new Task())
Task.java
)Ця точка розриву породжує питання про помилку під час кожного запуску Debug As... > JUnit Test
Щоб вирішити цю проблему, я перемістив 'Точку зламу' вгору у власне тест (всередині TaskTest.java). Після того, як виконання зупинилося, я додав точку розбиття туди, куди я його мав, спочатку (всередині Task.java).
Я все ще отримав ту саму помилку, але після натискання кнопки "ОК" точка зламу спрацювала чудово.
Сподіваюся, що хтось допомагає,
-гмале
У мене була така ж проблема, коли я робив на приставному сервері і компілював новий .war файл ANT. Вам слід зробити таку ж версію компілятора jdk / jre та побудувати шлях (наприклад, jdk 1.6v33, jdk 1.7, ....) після того, як вам доведеться встановити Java Compiler, як було написано раніше.
Я все робив і досі не працює. Рішенням було видалення зібраних файлів .class і цілі згенерованого файлу війни, і тепер він працює :)
Я знайшов ще одну причину цього повідомлення. Я програмував Scala. Рішення було:
Тепер налагодження має працювати. Зверніть увагу, що я встановив плагін Scala IDE, ця опція може бути недоступною, якщо у вас її немає.
У мене була така ж проблема, коли налагодження WAR (побудованого з багатьох артефактів проекту Eclipse), розгорнутого до Tomcat.
Я будую все, використовуючи сценарій збірки ANT. Якщо це саме ви робите, переконайтеся, що налагоджувальний прапор встановлений на кожному завданні мурашника javac. Це була моя єдина проблема - сподіваюся, це допоможе вашій проблемі!
У мене була така ж помилка з JBoss 7.1 .. І я зробив те саме, що і з Зефіро. Просто проігнорував помилку, і я зміг нормально розмістити точки прориву. У моєму випадку я будував мислителя мурашиного конструктора, і це моє завдання javac:
<javac
srcdir="${src.dir}"
destdir="${build.classes.dir}"
includeantruntime="false"
debug="${debug}"
verbose="false"
debuglevel="lines,vars,source"
source="1.6"
target="1.6">
<!-- Sppressing warning for setting an older source without bootclasspath
(see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
<compilerarg value="-Xlint:-options"/>
<classpath>
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
</classpath>
</javac>
У мене виникло те саме питання, я витратив чимало часу на пошук рішення, але ці рішення є невикористаними, тому я самостійно вивчаю всі випадки, нарешті з’ясував проблему, що це конфлікт між версіями JDK. Нижче наведено кроки для вирішення проблеми: 1. Видаліть усі версії JDK та JRE, збережіть лише одну версію. 2. Встановіть систему JAVA_HOME і компілятор Java в Eclipse те саме. У деяких випадках помилка вище не зникне, але ми зможемо працювати на налагоджувальній моделі.
Моя проблема полягала в тому, що у мене було 2 JAR, і я намагався змінити один з іншим, грунтуючись на його порядку на Java Build Path => Order & Export
вкладці Eclipse, тому що один був для налагодження, а інший - ні (JAR налагодження був першим у порядку). Коли я зробив це таким чином, мені довелося вручну долучити джерело.
Я спробував видалити JAR без налагодження та розмістити JAR-налагодження в моєму каталозі \ WEB-INF \ lib \, очищенні, будівництві тощо, і воно спрацювало. Цього разу (видаливши додане джерело), воно автоматично дозволило б мені переходити по коду налагодження, не потребуючи приєднання жодного джерела вручну. Точки розриву та налагодження також спрацювали.
У випадку, якщо хтось все-таки відчуває проблеми, я також спробував усі ці конкретні рішення, згадані в інших відповідях:
Add line number attributes...
org.eclipse.jdt.core.prefs
як згадується в іншій відповіді: https://stackoverflow.com/a/31588700/1599699Я також зробив звичайне відключення сервера (і переконавшись, що java.exe фактично закритий ...), видалив \ build \ каталоги в обох проектах, перезапустив Eclipse з параметром -clean, відтворив JAR налагодження, оновив, очищення та побудова проекту з налагодженням JAR в ньому, запуск сервера в режимі налагодження, публікація / очищення та точка точковості.
Я все, що перераховано вище, зробив під час компіляції / складання банок - все одно мав те саме питання.
Зрештою, зміни jvmarg, перелічені нижче під час запуску сервера, для мене нарешті спрацювали:
1) Видалено / прокоментували купу аргументів jvm, що стосуються javaagent та bootclasspath.
2) Увімкнено / непрокоментовано наступний рядок:
Потім, коли я запускаю сервер, я можу вплинути на свої точки прориву. Я підозрюю, що яаагент якимось чином заважав здатності Eclipse виявляти номери ліній.
Перевірте / зробіть наступне:
1) У розділі "Вікно -> Налаштування -> Java -> Компілятор -> Створення класифікованих файлів", всі параметри повинні бути правдивими:
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) У папці .settings свого проекту знайдіть файл під назвою org.eclipse.jdt.core.prefs. Перевірте або встановіть org.eclipse.jdt.core.compiler.debug.lineNumber = створити
3) Якщо все-таки з'явиться вікно про помилку, поставте прапорець, щоб не відображати повідомлення про помилку.
4) Очистити та побудувати проект. Почніть налагодження.
Зазвичай вікно помилок більше не відображається, а інформація про налагодження відображається правильно.
Я також зіткнувся з цією проблемою. Я використовую сценарій складання мурашок. Я працюю над застарілим додатком, тому використовую jdk версії 1.4.2. Це працювало, тому я почав оглядатися. Я помітив, що під конфігурацією налагодження на вкладці JRE версія Java була встановлена на 1,7. Одного разу я змінив його на 1.4, він працював.
Я сподіваюся, що це допомагає.
Я намагався налагодити диспетчер журналів, і мені потрібно було змінити jre на jdk, а потім вибрати цей jdk на "головній" вкладці "Java Runtime Environment" | "JRE" конфігурації налагодження тоді все було добре.
Я бачив цю проблему, коли анотував клас із @ManagedBean (javax.annotation.ManagedBean). Попереджувальне повідомлення з’явилося під час запуску нещодавно доданого додатка на JBoss EAP 6.2.0. Ігнорувати це та бігати все одно не допомогло - точки перелому так і не було досягнуто.
Я називав цю квасолю за допомогою EL на сторінці JSF. Тепер ... можливо, що @ManagedBean не корисний для цього (я новачок у CDI). Коли я змінив анотацію на @Model, мій квасоля виконується, але попередження про точку розриву також відійшло, і я потрапив, як очікувалося.
Підсумовуючи це, звичайно, це виглядало так, ніби анотація @ManagedBean переплутала номери рядків, незалежно від того, чи це неправильне використання примітки.
Переконайтеся, що проект, у якому основний клас виконання, - це той самий проект, у якому клас, у якому ви маєте точки прориву . Якщо ні, то переконайтеся, що обидва проекти знаходяться на конверті конфігурації запуску та з’являться перед будь-якими банками та папками класів.