Почему у моего проекта Eclipse есть точки фантомного отладчика? - PullRequest
72 голосов
/ 07 апреля 2009

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

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

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

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

Ответы [ 5 ]

112 голосов
/ 07 апреля 2009

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

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

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

alt text

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

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

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

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

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

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

37 голосов
/ 04 октября 2012

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

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

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

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

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

Некоторые картинки, которыми могут руководствоваться другие:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

5 голосов
/ 29 декабря 2013

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

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

2 голосов
/ 07 декабря 2017

Я столкнулся с проблемой, когда исходный файл имел постоянные маркеры для точек останова, которые не существовали. Я попытался очистить проект, сделать полную сборку, перезапустить 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
0 голосов
/ 13 декабря 2014

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

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

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

...