невозможно разместить точки останова в eclipse

Я использую eclipse europa (3.5) на 64-разрядной версии Windows Vista Home Premium с использованием JDK 1.6.0_18 (32-разрядная версия).

Обычно я могу нормально ставить точки останова; Однако для определенного класса, который НЕ является частью проекта (этот класс находится внутри файла .JAR (файл .JAR является частью проекта)), хотя я прикрепил исходный каталог к ​​этому файлу .JAR, я не могу поставить точку останова в этом классе.

Если я дважды щелкну панель точек останова (левая граница), я замечу, что установлена ​​точка останова класса. Мне было интересно, не было ли информации об отладке; Однако обнаружил, что этот конкретный класс был скомпилирован с использованием задачи ant/javac с использованием debug="true" и debuglevel="lines,vars,source". Я даже запустил jad для этого класса, чтобы убедиться, что он действительно содержит отладочную информацию.

Итак, почему eclipse мешает мне поставить точку останова?

РЕДАКТИРОВАТЬ: Просто чтобы все понимали контекст, это веб-приложение, работающее под управлением tomcat 6.0. Я удаленно отлаживаю приложение из eclipse после запуска tomcat снаружи. Приложение работает просто отлично. Я пытаюсь понять поведение вышеуказанного класса, что я не могу сделать, так как eclipse не позволяет мне установить BP.

P.S. Я видел здесь несколько тем, в которых говорилось о том, что BP не попали, но в моем случае я не могу разместить BP!

PPS: я попробовал JDK 1.6.0_16, прежде чем попробовать 1.6.0_18.

Спасибо за любые указатели.


person anjanb    schedule 10.03.2010    source источник
comment
Пытались ли вы войти в класс из вызывающего класса? Он показал прикрепленный источник? Не решение, но может помочь.   -  person josefx    schedule 19.03.2010
comment
josefx: этот класс вызывался с использованием Reflection, который требует довольно много HOP, прежде чем фактический метод будет активирован, я не входил в метод.   -  person anjanb    schedule 19.03.2010


Ответы (8)


Попробуйте взглянуть на свою конфигурацию Java-> отладка-> пошаговая фильтрация, когда она включена, и вы не можете остановиться внутри отфильтрованного пакета.

person Claudio    schedule 15.03.2010

Похоже, Eclipse не может найти файл jar в пути к классам, хотя вы сказали, что файл jar является частью проекта. Что произойдет, если вы запустите приложение в обычном режиме? Вы получаете ClassDefNotFoundException или что-то подобное?

Если вы проверите вкладки в конфигурации запуска/отладки, вы сможете увидеть, какие пути и файлы jar находятся в пути к классам во время выполнения. Вы также можете добавить JAR-файлы, которые не нужны для сборки приложения, но необходимы для его запуска.

person richj    schedule 10.03.2010
comment
привет Richj, спасибо за ваше примечание. когда я пытаюсь найти класс, используя CTRL + SHIFT + T (открытый тип), я могу открыть этот конкретный класс, и eclipse показывает мне источник, который я прикрепил к .JAR. Хотя я могу поставить BP на классы, которые являются частью проекта, я не могу поставить BP на вышеуказанный класс. - person anjanb; 10.03.2010
comment
Это означает, что файл jar находится в пути к классам сборки. Путь к классам среды выполнения не обязательно совпадает с путем к классам сборки, но я признаю, что это долгий путь, поскольку обычно вам нужно активно изменять его, чтобы два пути к классам были разными. Если приложение выполняет код без использования отладчика, проблема должна заключаться в чем-то другом. - person richj; 10.03.2010
comment
В этом случае у меня возникнет соблазн создать небольшой тестовый проект, чтобы попытаться выяснить, что происходит. Он должен содержать только проблемный jar-файл и небольшой класс, содержащий один или несколько тестовых методов. - person richj; 10.03.2010
comment
привет, richj, я также решил аналогичным образом :-) приложение работает просто отлично - просто мне нужно понять, как именно работают эти классы .JAR. Спасибо. - person anjanb; 10.03.2010
comment
привет, рич, я как бы решился на такое решение. Как вы упомянули, приложение отлично работает с ИЛИ без отладчика. Я просто хочу понять, как работает код, поэтому мне нужно иметь возможность устанавливать BP для различных методов/операторов классов. Спасибо. - person anjanb; 10.03.2010

При попытке добавить точки останова для страницы .jsp выяснилось, что страница не была открыта с помощью редактора JSP, что предотвратило установку точек останова.

person user2246494    schedule 29.09.2014

хотя я прикрепил исходный каталог к ​​этому файлу .JAR, я не могу установить точку останова в этом классе.

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

person Chris Lercher    schedule 17.03.2010
comment
привет, Крис, да, я сам собрал банку из исходников. Итак, я знаю, что исходный каталог и .JAR синхронизированы. В противном случае этот .JAR был подготовлен из нескольких проектов. Его исходный каталог имел следующую структуру: sourceDir A org fcitmuk db B org fcitmuk epihandy C org fcitmuk epihandy xform D org fcitmuk epihandy Любые подсказки? - person anjanb; 19.03.2010

Мне известно об ошибке в eclipse, из-за которой точки останова не работают с определенной версией jdk 1.6.x. Для получения дополнительной информации см. здесь

person Cshah    schedule 18.03.2010
comment
Спасибо. это было проблемой в JDK 1.6.0_14, но было исправлено в 1.6.0_16. В настоящее время я использую 1.6.0_18, и у меня есть эта проблема. Что-то мне подсказывает, что я что-то забыл, но не могу найти! :-( - person anjanb; 19.03.2010

Используйте подключаемый модуль Jadclipse для декомпиляции jar во время выполнения, поместите точку останова в точку, где вызывается метод JAR, затем нажмите F6, и вы сможете войти в свой метод JAR.

person Vaishak Suresh    schedule 19.03.2010
comment
У меня есть исходный код для .JAR, поэтому нет необходимости выполнять JAD во время выполнения. - person anjanb; 19.03.2010
comment
JAR скомпилирован из того же источника, который вы приложили? Это очень важно, потому что в противном случае номера строк не будут совпадать, и это может не сработать при прикреплении кода. - person Vaishak Suresh; 19.03.2010
comment
Когда исходный код и .JAR не синхронизированы, точки останова eclipse ведут себя как сумасшедшие, и я видел такое раньше. Но на этот раз я не могу установить ОП нигде в классе, даже ни одного ОП. - person anjanb; 19.03.2010

Простое обновление файла .jar помогло мне.

Мне удалось разместить точки останова во всех других файлах классов того же пакета, кроме одного. Я заметил, что когда я открыл этот файл класса в редакторе и выбрал «Связать с редактором», eclipse не привел меня к самому этому файлу класса, а только к пакету этого файла класса.

После обновления «Связь с редактором» сработала, и я смог поставить точку останова.

Если кто-то может объяснить это поведение, это будет полезно.

person user104309    schedule 17.03.2016

Шаг 1. Переключение/включение точки останова Установите точку останова в строке кода или точке входа метода, с которой вы хотите начать отладку кода. Щелкните правой кнопкой мыши на левом поле редактора рядом со строкой кода, и появится контекстное меню. Выберите переключить точку останова в контекстном меню.

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

1. Check Hit count
2. Specify value as 1
3. Select “Suspend thread” option

Это остановит выполнение, когда программа достигнет точки останова.

Шаг 3. Переключитесь на режим отладки

В Eclipse выберите «Окно» -> «Открыть перспективу» -> «Отладка».

Шаг 4. Запустите в режиме отладки

Теперь запустите программу в режиме отладки. Выберите «Выполнить» -> «Отладка».

Теперь программа запускается в режиме отладки, и вы увидите состояние потока как «выполняется».

Когда программа достигает точки останова, состояние потока меняется с «выполняется» на «приостановлено».

Шаг 5. Отладка кода с помощью выражений \Наблюдение за переменными\Проверка

Теперь код останавливается в точке останова. Вы можете использовать переменные / выражение наблюдения для отслеживания текущего значения переменной отладки. Предположим, вы установили точку останова на переменной с именем «счетчик», и программа остановилась на переменной счетчика. Добавьте выражение с именем переменной «счетчик», которое позволяет вам отслеживать значение переменной во время выполнения программы. Вы также можете щелкнуть правой кнопкой мыши на переменную счетчика и выберите «Проверить» в контекстном меню. Если это метод, выберите имя метода и нажмите «Шаг к выбору». Это позволит вам отслеживать или отлаживать выполнение метода построчно.

Шаг 6. Нажмите клавишу F6, чтобы перейти к методу

Чтобы «перейти» к следующей исполняемой строке кода в текущем методе, нажмите клавишу «F6». Это передаст управление программой с текущей строки на следующую исполняемую строку кода.

person Community    schedule 20.04.2013
comment
Этот комментарий не отвечает ни на один вопрос, заданный ОП. - person snowe; 10.07.2014