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



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



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



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



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

703   5  

5 ответов:

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

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

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

alt text

почему затмение работает таким образом?

это восходит к 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. Это пример предоставления строительных блоков клиенты.

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

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

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

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

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

некоторые фотографии, чтобы направлять другим:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

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

устранение: Для того чтобы удалить точку останова, вы должны удалить точку останова в .Java-файл, в проекте библиотеки.

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

Я пошел копаться в метаданных Eclipse, и нашел проекты .файл маркеров. Удаление этого файла, наконец, устранило проблему.

для всех, кто имеет эту проблему, откройте каталог рабочей области, а затем перейдите к .метаданные./Плагины/орг.затмение.ядро.ресурсы./проекты/ваш проект, а затем переименовать / удалить файл .маркера.

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

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

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

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

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

Comments

    Ничего не найдено.