Отладка Java в Eclipse: источник не найден


179

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

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

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

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

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

Ответы:


53

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

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

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

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


Привет, спасибо за все, но я нашел этот ответ более полезным (стек через ссылку потока) [ stackoverflow.com/questions/5815013/…
shareef

11
@shareef эта ссылка о пропущенном Javadoc, а не пропущенном источнике.
Торбьерн Равн Андерсен

@ACV Ну да. Возможно, это не так сложно, как вы хотели бы - не могли бы вы дать мне знать, что вы хотели бы объяснить лучше?
Турбьерн Равн Андерсен

ответ - это другой способ сказать: проблема в том, что «источник не найден», и я предлагаю «попытаться найти источник»
Junchen Liu

1
@dhein Подумайте об открытии нового вопроса с более подробной информацией.
Торбьерн Равн Андерсен

301

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

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

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

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

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


7
Редактирование поиска источника на самом деле работает для меня. Спасибо Дуглас Фрари
Стивен Эбичондо

3
Работает как шарм. Спасибо!
Карлос Шпор

11
и что, если даже это не работает ... потому что это не работает для меня
Сарас Арья

11
Важный!! Работало хорошо, но только ПОСЛЕ того, как я остановил запущенное приложение и перезапустил его. Пока я не сделал это, казалось, что он все еще не мог получить источники.
Джич

1
Я занимался этим время от времени. Это сработало отлично.
aCarella

45

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

  • Вы можете связать источники для классов 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 показывает строки, отличные от тех, которые фактически выполняются:

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


Отличный ответ! Недостаток в этом ответе относится к комплектам OSGi: Eclipse может найти источник, если комплект содержит OSGI-OPT / src и комплект находится на пути сборки проекта Eclipse. Подробности смотрите в этом другом элементе stackoverflow: stackoverflow.com/questions/9720483/…
buzz3791

Может быть, вы можете взглянуть на это - я уже не могу попробовать ..
displayname

Хорошо знать. Много теории, но нет практического решения.
MasterJoe2

11

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

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

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


Я должен был сделать это в представлении «Отладка» в разделе «Удаленное приложение Java» или «Java HotSpot VM».
Абдул

9

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

mvn clean eclipse:eclipse

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

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

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

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


Только это работает и для меня! mvn eclipse:eclipseдобавить зависимость проекта к пути сборки Java, чтобы он работал. Кроме того, плагин m2eclipse добавит зависимости проекта только в «Зависимости Maven», которые во вкладке «Библиотеки», и отладчик не сможет найти.
наивно

Я не знаю, что случилось, но после выполнения этого я больше не вижу своих зависимостей maven в разделе «Maven Dependencies».
displayname

6

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


Я следил за этим, и это сработало. Возможно, потому что я также добавил желаемую папку проекта java на вкладке «Source» новой конфигурации run / debug. Может быть, простое добавление отсутствующей исходной папки / проекта на вкладку «Source» существующей конфигурации run / debug может работать без необходимости сначала удалять ее.
xilef

6

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

Window=> Preferences=> Java=> Installed JREs,

введите описание изображения здесь

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

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

введите описание изображения здесь

Нажмите на каталог, найдите Jdk, он должен выглядеть ниже. введите описание изображения здесь

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


Используйте этот подход, если Eclipse не может загружать классы из среды выполнения Java (любой класс, где полное имя типа начинается с java.подобного java.lang.String)
Аарон Дигулла

4

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

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


3

В моем случае, даже после редактирования поиска источника и добавления проекта, это не сработало. Я настроил путь сборки проекта.

введите описание изображения здесь

После этого я выбрал Системную библиотеку JRE, и она заработала.

введите описание изображения здесь


2

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

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


1

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

В случае Maven я рекомендую использовать плагин run-jetty-run:

http://code.google.com/p/run-jetty-run/

В качестве обходного пути вы также можете подключиться к работающей JVM с помощью отладчика, и вы увидите код. В качестве альтернативы вы можете использовать плагин Dynamic Source Lookup для Eclipse отсюда:

https://github.com/ifedorenko/com.ifedorenko.m2e.sourcelookup

К сожалению, это не помогло мне, поскольку у него есть проблемы с путями Windows с пробелами.

Я заполнил запрос на улучшение Eclipse Bugzilla, и если вы согласны, что этот вопрос «Источник не найден» должен исчезнуть навсегда, пожалуйста, проголосуйте за него здесь:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384065

Спасибо!

Саса


Теперь у вас есть моя поддержка на эту ошибку!
Абдул

1

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

введите описание изображения здесь

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



0

У меня была та же проблема. В моем случае я отключил Window-Preferences-Java-Debug [Приостановить выполнение на необработанных исключениях]. Затем консоль показала мне правильную ошибку: мой пользователь MySql не имел прав доступа к базе данных. По этой теме.


0

Информация: это возможное решение, когда вы используете maven (pom.xml) с несколькими проектами.

Если вы работаете с maven, убедитесь, какую версию вы используете внутри соответствующего pom.xml (например, 1.0.1-SNAPSHOT). Возможно, ваш код обновлен, но ваши зависимости pom.xml по-прежнему принимают старые JAR-файлы / снимки (со старым кодом).

Нахождение проблемы:

  • Попробуйте отладить соответствующий файл.
  • Поэтому установите точку останова в соответствующей области кода.
  • Когда появится «источник не найден» , обязательно выполните привязку в нужном проекте (где находится файл .java).
  • Файл компиляции .class открывается в редакторе IDE.
  • Нажмите «Связь с редактором», чтобы найти соответствующий JAR / снимок.
  • Теперь убедитесь, что этот JAR-файл самый последний. Возможно, есть более новый. В этом случае напишите номер самой последней версии в файле pom.xml.
  • Затем выполните обновление maven и соберите (например, «mvn clean install -U») в правильном каталоге проекта.

0

Если вы используете eclipse или STS, пожалуйста, установите и используйте GC (плагин GrepCode), иногда вам не нужно прикреплять исходный файл .zip к пути вашего проекта, чтобы GrepCode работал нормально для вас.


0

У меня была проблема, связанная с отладкой сервера Glassfish в Eclipse. Это было вызвано загрузкой исходного кода из другого хранилища (переход с SVN на GitHub). При этом сервер Glassfish использовал неправильные скомпилированные классы, и, следовательно, время источника и выполнения не синхронизировалось с точками останова, появляющимися в пустых строках.

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

Каталог классов находится в: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <ваше веб-приложение> / WEB-INF / classes


0

В моем случае с проектами Tomcat я проверил проект здесь: Окно - Настройки - Tomcat - Исходный путь - Добавить Java-проекты в исходный путь


0

В моем случае версия Maven другого ссылочного проекта не соответствовала версии тестового проекта. Когда они были одинаковыми, проблема исчезла.


0

При работе в режиме отладки нажмите «Редактировать поиск источника» после приостановки из потока. На этом этапе мы сможем добавить необходимый проект / jar, который содержит ваш исходный код. После того, как я добавил свой текущий проект таким образом, он решил мою проблему. Спасибо


0

Если вы хотите присоединить исходный код к любому JAR путем автоматической загрузки, попробуйте использовать этот подключаемый модуль Eclipse Java Source Attacher

введите описание изображения здесь


0

У меня была эта проблема, когда я работал над кодом Java, чтобы выполнить обработку файла Excel, содержащего набор данных, а затем преобразовать его в файл .csv, я попробовал ответы на этот пост, но они не работали. проблема была в самих jar-файлах. после загрузки необходимых jar-файлов один за другим (старые версии) и добавления их в мой проект ошибка «источник не найден» исчез. Может быть, вы можете проверить свои файлы JAR. надеюсь, это поможет.


0

это сработало для меня

щелкните правой кнопкой мыши по проекту -> Свойства -> Сборка развертывания -> добавьте свой флягу


0

Перейдите к настройке Debug в eclipse и используйте приведенную ниже цель для запуска вашего приложения.

-Dmaven.surefire.debug

например

-Dmaven.surefire.debug exec: Java


0

Ну, вот что сработало для меня. Я перепробовал все возможные решения на StackOverflow, которые были. Я попытался изменить свое местоположение источника в меню отладки, я установил Eclipse-плагин m2e, я перешел со встроенного Maven и установил run-jetty-run, но ничего не получилось. Теперь я хочу предупредить, что я не пытался просматривать исходный код внешнего человека, я просто хотел увидеть свой СОБСТВЕННЫЙ код, но каждый раз, когда я «заходил» к своим методам, которые я написал, которые были в МОЕМ проекте, я получал Ошибка «Источник теперь найден».

После того, как я наконец спросил эксперта, моя проблема заключалась в том, что первое, что Eclipse делал, вызывал ClassLoader, который вы можете увидеть из стека отладки. Все, что мне нужно было сделать, это F6 (шаг), а затем он вернул меня к исходному вызову, а затем F5 (шаг). И там был мой код. Вздох ... такое простое исправление, но потерянный час.


0

Для начинающих,

Существует вероятность того, что файл jar является частью проекта, который вы еще не включили в рабочую область Eclipse.

Для этого вам нужно знать имя проекта файла jar. Скажем, например, его abc -18.0.0-SNAPSHOT.jar, это означает, что проект, который вы должны включить в ваше рабочее пространство, это abc .


0

У меня была такая же проблема с eclipse 2019-03 (4.11.0), и я смог решить эту проблему только путем отладки с помощью удаленной отладки вместо непосредственного запуска в режиме отладки.


0

Прикрепить источник -> Добавить -> Внешний архив -> выбрать банку -> открыть -> готово

Подвох - это поискать в банке с источниками и прикрепить эту банку.

например, фляга заканчивается "-sources" Stax2-api-3.4.1-sources


-1

Если вы пытаетесь отладить свой Java-проект Maven, и eclipse не может найти ваш источник, попробуйте один из них.

  1. Попробуйте добавить эти строки в pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Попробуйте maven-> update и затем отладьте

  1. Перейти в корневую директорию проекта;

mvn eclipse: затмение

теперь попробуйте отладку


-1

В eclipse photon попробуйте отключить «Окно-> Настройки-> Java-> Отладка-> Использовать расширенный поиск исходного кода»

Редактировать: в этой версии eclipse есть связанная ошибка, которая приводит к сообщению «источник не найден» при отладке приложений Java. См. Сообщение об ошибке bugs.eclipse.org/bugs/show_bug.cgi?id=537699 для получения дополнительной информации.


Хорошо, в этой версии eclipse есть связанная ошибка, которая приводит к сообщению «источник не найден» при отладке приложений Java. См. Отчет об ошибке bugs.eclipse.org/bugs/show_bug.cgi?id=537699 для получения дополнительной информации
6pi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.