Отладка Java в Eclipse: источник не найден - PullRequest
166 голосов
/ 30 мая 2011

При отладке Java-приложения в Eclipse я получаю ошибку « Источник не найден » в двух случаях:

  • Переход к файлу в другом проекте, который уже импортирован
  • Переход к файлу в установленном репозитории maven

Файлы есть, но затмение не вступит в них, вместо этого будет показана кнопка « присоединить источник »

Я попытался подключиться (что открыло диалоговое окно для определения переменной ?!), и eclipse перешел к файлу, но отладчик не смог проверить там какие-либо переменные. Также ручное подключение источника для каждой зависимости нецелесообразно, так как в моем случае существуют тысячи файлов зависимостей.

Я новичок в eclipse \ java , поэтому объяснение того, почему это происходит + как решить эту проблему, очень помогло бы!

Ответы [ 30 ]

262 голосов
/ 08 апреля 2014

Всего 3 шага для настройки Eclipse IDE:

Примечание: После обновления путей поиска исходного кода вам придется остановить и перезапустить сеанс отладки.В противном случае файл с отсутствующим источником будет продолжать отображать «отсутствующий источник».

Редактировать поиск источника Выберите команду «Редактировать поиск источника ...» [Редактировать поиск источника], чтобы открыть диалоговое окно «Исходный путь»,который позволяет вносить изменения в исходный путь поиска выбранной цели отладки.

enter image description here

enter image description here

enter image description here

ВАЖНО Перезапустите Eclipse после этого последнего шага.

50 голосов
/ 30 мая 2011

Отладка Eclipse работает с классом , фактически загруженным программой .

Описанные вами симптомы звучат так, как будто рассматриваемый класс не был обнаружен в проекте, но в дистрибутивной фляге безотладочная информация найдена до проекта, с которым вы работаете.

Это может произойти по нескольким причинам, но посмотрите на местоположение, где находятся классы, показывающие это поведение (посмотрите на панели навигацииидентифицировать это).Скорее всего, вам потребуется изменить путь сборки проекта, чтобы избежать использования этого jar-файла, и чтобы JVM использовала проект вместо этого.

РЕДАКТИРОВАТЬ: обратите внимание, что с 2018 года принято использовать каркас сборки, такой как Maven.где путь сборки управляется плагином m2e, так что эта проблема должна быть намного реже, чем когда был задан вопрос.Если вы используете Maven и m2e, обязательно включите Preferences / Maven / «Загрузить источники артефактов» или щелкните правой кнопкой мыши проект Maven / «Загрузить источники».

45 голосов
/ 31 мая 2011

Симптомы прекрасно описывают случай, когда найденный класс не имеет связанного (или назначенного) источника.

  • Вы можете связать источники для классов JDK в Предпочтения> Java> УстановленоJRE .Если JRE (не JDK) определяется как используемый по умолчанию JRE, то ваши классы JDK не будут иметь подключенных источников.Обратите внимание, что не все классы JDK предоставляют источники, некоторые из них распространяются только в двоичной форме.
  • Классы из пути сборки проекта, добавленные вручную, требуют ручного присоединения связанного источника.Источник может находиться в файле zip или jar, в рабочей области или в файловой системе.Eclipse просканирует zip-архив, поэтому ваши источники не обязательно должны находиться в корне файла архива, например.
  • Классы, из зависимостей, поступающих от других плагинов (maven, PDE и т. Д.).В этом случае это зависит от плагина, как источник будет предоставлен.
    • PDE потребует, чтобы каждый плагин имел соответствующий пакет XXX.source , который содержит источник плагина.Дополнительную информацию можно найти здесь и здесь .
    • m2eclipse может извлекать источники и javadocs для зависимостей Maven, если они доступны.Эта функция должна быть включена m2eclipse предпочтения (параметр был назван что-то вроде " Скачать исходный код и javadocs ".
    • Для других плагинов, вам нужно обратиться к ихдокументация
  • Классы, загружаемые из вашего проекта, автоматически сопоставляются с источниками из проекта.

Но что, если Eclipse по-прежнему предполагает, чтовы присоединяете источник, даже если я правильно установил свои классы и их источники:

Это почти всегда означает, что Eclipse находит класс в другом месте, чем вы ожидаете. Проверьте путь поиска источника, чтобы увидеть, где онможет получить неправильный класс. Обновите путь в соответствии с вашими выводами.

Eclipse вообще ничего не находит, когда достигается точка останова:

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

Исключением являются пакеты отладки в PDE .В этом случае, поскольку среда выполнения состоит из нескольких проектов, которым не нужно объявлять зависимости друг от друга, Eclipse автоматически найдет класс в рабочей области, даже если он недоступен в исходном пути поиска.

Я не вижу переменные, когда я достигаю точки останова или она просто открывает источник, но не выбирает линию точки останова:

Это означает, что во время выполнения либоJVM или сами классы не имеют необходимой отладочной информации.Каждый раз, когда классы компилируются, можно добавлять отладочную информацию.Чтобы уменьшить объем памяти классов, иногда эта информация опускается, что затрудняет отладку такого кода.Ваш единственный шанс - попытаться перекомпилировать с включенной отладкой.

Средство просмотра исходного кода Eclipse показывает строки, отличные от тех, которые фактически выполняются:

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

10 голосов
/ 10 января 2013

С http://www.coderanch.com/t/587493/vc/Debugging-Eclipse-Source

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

Я добавил свой текущий проект таким образом, и он решил мою проблему

9 голосов
/ 25 апреля 2014

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

mvn clean eclipse:eclipse

и это помогло.

Примечание. Использование этого подхода может привести к путанице в плагине m2e, поскольку эти два подхода очень разные. m2e добавляет в ваш проект виртуальный узел под названием «Зависимости Maven» и просит Maven добавить туда все зависимости.

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

Если вы не знаете, как работает classpath в Eclipse, такой подход не рекомендуется.

5 голосов
/ 01 ноября 2012

Удалите существующую конфигурацию отладки и создайте новую. Это должно решить проблему.

4 голосов
/ 30 марта 2017

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

Окно => Предпочтения => Java => Установленные JRE ,

enter image description here

Вы видите на приведенном выше экране Jre1.8.0_12 выбран.

выберите используемую вами JRE и нажмите Edit . Теперь вы должны увидеть нижний экран.

enter image description here

Нажмите на каталог, найдите Jdk, он должен выглядеть ниже. enter image description here

нажмите ОК, и все готово

3 голосов
/ 11 октября 2012

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

Пожалуйста, нажмите кнопку Прикрепить исходный код. Затем удалите папку «по умолчанию», затем нажмите «Добавить», перейдите в папку проекта и прикрепите. Это сработало для меня

2 голосов
/ 30 мая 2011

Очевидно, Eclipse не знает автоматически, где находится исходный код для зависимых jar-файлов.Непонятно, почему отладчик не может проверять переменные после присоединения источника.Одна из возможностей - неверный / несовместимый источник.

Если у вас есть проект maven, а источники зависимостей загружены и доступны в локальном хранилище, вы можете установить m2eclipse , mavenПлагин eclipse и посмотрите, поможет ли это в решении вашей проблемы.

1 голос
/ 07 июня 2018

В моем случае в «Attach Source» я добавил другой каталог проекта maven на панели «Source Attachment Configuration». Добавление последней версии jar из репозитория m2 не работает. Все классы из другого проекта Maven не удалось открыть.

enter image description here

Здесь test был мой другой проект maven, содержащий все исходники java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...