Почему в моем проекте Eclipse есть контрольные точки отладки phantom?

У меня есть небольшой проект, который при запуске в отладчике Eclipse всегда, кажется, останавливается в строке 106 FileInputStream.class, где файлы открыты. Нет контрольных точек, но Eclipse ведет себя точно так же, как если бы у меня была точка останова. Если я удалю все точки останова, это все равно произойдет.

У меня есть второй гораздо более крупный проект в том же рабочем пространстве Eclipse, который не страдает от этой проблемы.

Я только что перенесла небольшой проект с моей старой машины Linux, где я ее разработал в Europa Eclipse и возникла эта проблема, на мою новую машину Windows, где я продолжаю видеть проблему в Ganymede Eclipse. Проблема сохраняется в разных операционных системах и в версиях Eclipse, но, по-видимому, не в проектах. Я не понимаю! Я grepped через каждый файл в этом каталоге проекта и не мог найти ничего, что могло бы быть файлом, каким-то образом направляющим Eclipse для остановки в FileInputStream.

Дополнительная информация: кажущаяся точка останова на самом деле не для строки 106 FileInputStream; он выглядит как контрольная точка исключения для FileNotFoundException, будучи выброшен из собственного кода, вызванного из этой строки в FileInputStream. Но опять же, похоже, у меня нет никаких точек останова. Контрольные точки исключений определены где-то еще?

Ответ 1

Вы пытались отменить выбор

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions

? (например, упомянутый в этом потоке)

alt text

Почему Eclipse работает таким образом?

Он возвращается к 2002 году, когда иерархия объектов точки останова была удалена.

Чтобы установить точку останова, со старым API, клиенту требуются объекты Java Model - например, IType, IField и т.д.
С новым API все, что требуется моделью отладки, это имена типов, имена полей и т.д.

Это позволяет клиентам устанавливать точки останова, когда объекты Java Model не доступны.
Клиенты теперь указывают ресурс для связывания точки останова с (до того, как мы ограничили ее соответствующими ресурсами Java Model).

Точки останова теперь также могут быть "скрыты" . То есть, они не должны быть зарегистрированы в диспетчере точек останова.
Точки останова также могут быть выборочно сохранены (маркеры допускают сохранение всех/всех типов маркеров).
Это делает модель отладки более гибкой и дает клиентам больше строительных блоков.

Это также упростило часть нашей реализации отладки Java - например, функция "suspend on any uncaught exception", просто устанавливает точку останова для типа с именем "java.lang.Throwable", а не конкретный IType в конкретном проекте.
Точка останова не регистрируется диспетчером останова (т.е. скрытым) - она ​​известна и используется только одним клиентом.
Другим примером является "run to line breakpoint". IJavaRunToLineBreakpoint удален, поскольку его специальная функциональность больше не требуется. Теперь Java debug ui просто создает "точку останова", которая скрыта, не сохраняется и имеет число попаданий в 1. Это пример предоставления блоков для клиентов.

Ответ 2

У меня была аналогичная проблема, но принятое решение не сработало для меня. Я занимаюсь разработкой Eclipse для Android и установил некоторые точки останова, а затем отключил их. Несмотря на то, что я отключил их, Eclipse продолжал выполнять выполнение на этих контрольных точках phantom. Решением для меня было открыть окно Breakpoints:

Окно > Показать вид > Другое...

Отладкa > Точки останова

Затем щелкните правой кнопкой мыши любую точку останова и выберите "Удалить все"

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

Некоторые фотографии для руководства другими:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

Ответ 3

Для тех, кто не находит других полезных решений, я нашел свое личное решение для своей проблемы. Я работаю с библиотекой .jar, которая создается путем создания другого проекта в рабочей области. Если я установил точку останова в .java в проект библиотеки, тогда точка останова будет запущена при отладке окончательного проекта. Однако, когда отладчик приостанавливает выполнение , отображается файл .class, который имеет свои собственные точки останова, и поэтому точка останова, установленная в .java файле, здесь не показана!

Решение: Чтобы удалить точку останова, вы должны удалить точку останова в .java файле в проекте библиотеки.

Ответ 4

Я столкнулся с проблемой, когда исходный файл имел постоянные маркеры для точек останова, которых не было. Я попробовал очистить проект, выполнив полную сборку, перезапустив Eclipse - ничего не получилось.

Я пошарил метаданные Eclipse и нашел файл проектов .markers. При удалении этого файла проблема была устранена.

Для всех, у кого есть эта проблема, откройте каталог рабочей области, затем перейдите в .metadata/.plugins/org.eclipse.core.resources/.projects/ваш проект, а затем переименуйте/удалите файл .markers.

Например, если ваша папка рабочего пространства ~/workspace, а ваш проект называется Foo, вы можете сделать:

$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers

Ответ 5

Для тех, кто не нашел решения из предыдущих ответов, они могут попробовать решить мою проблему. Я думаю, что похоже на проблему/решение HAL9000

Если у вас есть два класса с одинаковым именем (в двух разных проектах), точки останова на одном, применяются и на другом. Оба они отображаются в окне "Точки останова".

Решение. Если вы удалите точку останова из класса - с тем же именем, - которое вы не используете, удаляет точку останова из класса, который вы отлаживаете.