Debugowanie Java Eclipse: nie znaleziono źródła


179

Podczas debugowania aplikacji Java w środowisku Eclipse pojawia się błąd „ Nie znaleziono źródła ” w dwóch przypadkach:

  • Wejście do pliku w innym projekcie, który jest już zaimportowany
  • Wejście do pliku w zainstalowanym repozytorium maven

Pliki tam są, ale zaćmienie nie wchodzi w nie, zamiast tego pokazuje przycisk „ załącz źródło

Próbowałem dołączyć (który otworzył okno dialogowe, aby zdefiniować zmienną ?!) i zaćmienie przeskoczyło do pliku, ale debugger nie mógł tam sprawdzić żadnych zmiennych. Również ręczne dołączanie źródła dla każdej zależności nie jest praktyczne, ponieważ w moim przypadku istnieją tysiące plików zależności.

Jestem nowy w Eclipse \ java, więc wyjaśnienie, dlaczego tak się dzieje, + jak to rozwiązać, bardzo by pomogło!

Odpowiedzi:


53

Debugowanie środowiska Eclipse działa z klasą faktycznie załadowaną przez program.

Opisane symptomy brzmią tak, jakby dana klasa nie została znaleziona w projekcie, ale w słoju dystrybucyjnym bez informacji debugowania znalezionych przed projektem, nad którym pracujesz.

Może się to zdarzyć z kilku powodów, ale spójrz na lokalizację, w której znaleziono klasy pokazujące to zachowanie (spójrz na panel nawigacyjny, aby to zidentyfikować). Najprawdopodobniej będziesz musiał zmienić ścieżkę kompilacji projektu, aby uniknąć używania tego słoika i zamiast tego JVM użyje projektu.

EDYCJA: Zauważ, że od 2018 r. Powszechne jest korzystanie z frameworka kompilacji, takiego jak Maven, w którym ścieżką kompilacji zarządza wtyczka m2e, więc ten problem powinien występować znacznie rzadziej niż w przypadku zadawania pytania. Jeśli korzystasz z Maven i m2e, pamiętaj, aby włączyć Preferencje / Maven / „Pobierz źródła artefaktów” lub kliknij prawym przyciskiem myszy projekt, Maven / „Pobierz źródła”.


cześć dzięki za wszystko, ale znalazłem tę odpowiedź bardziej użyteczną (stos nad łączem przepływu) [ stackoverflow.com/questions/5815013/…
shareef

11
@shareef ten link dotyczy brakującego javadoc, nie brakuje źródła.
Thorbjørn Ravn Andersen

@ACV Cóż, tak. Być może nie jest tak skomplikowany, jak byś chciał - czy możesz dać mi znać, co chciałbyś lepiej wyjaśnić?
Thorbjørn Ravn Andersen

odpowiedź to inny sposób powiedzenia: problem polega na tym, że „nie znaleziono źródła”, a moja sugestia brzmi: „spróbuj znaleźć źródło”
Junchen Liu

1
@dhein Zastanów się nad otwarciem nowego pytania z dużo większą ilością szczegółów.
Thorbjørn Ravn Andersen

300

Tylko 3 kroki do konfiguracji Eclipse IDE:

Uwaga: po zaktualizowaniu ścieżek wyszukiwania źródła musisz zatrzymać i ponownie uruchomić sesję debugowania. W przeciwnym razie plik z brakującym źródłem będzie nadal wyświetlał „brakujące źródło”.

Edytuj wyszukiwanie źródła Wybierz polecenie Edytuj wyszukiwanie źródła ... [Edytuj wyszukiwanie źródła], aby otworzyć okno dialogowe Ścieżka źródłowa, które umożliwia wprowadzanie zmian do ścieżki wyszukiwania źródła wybranego celu debugowania.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

WAŻNE Uruchom ponownie Eclipse po tym ostatnim kroku.


7
Edycja odnośnika źródłowego faktycznie działała dla mnie. Dzięki Douglas Frari
Stephen ebichondo

3
Działa jak marzenie. Dzięki!
Carlos Spohr

11
a co jeśli nawet to nie zadziała ... bo to dla mnie nie działa
Saras Arya

11
Ważny!! Działał dobrze, ale dopiero PO zatrzymaniu uruchomionej aplikacji i ponownym uruchomieniu. Dopóki tego nie zrobiłem, wydawało się, że nadal nie można uzyskać źródeł.
Jeach

1
Zajmowałem się tym z przerwami od miesięcy. To działało idealnie.
aCarella,

45

Symptomy doskonale opisują przypadek, gdy znaleziona klasa nie ma powiązanego (lub przypisanego) źródła.

  • Możesz powiązać źródła klas JDK w Preferencje> Java> Zainstalowane środowisko JRE . Jeśli JRE (nie JDK) zostanie wykryty jako domyślny JRE do użycia, twoje klasy JDK nie będą miały dołączonych źródeł. Zauważ, że nie wszystkie klasy JDK mają źródła, niektóre z nich są dystrybuowane tylko w formie binarnej.
  • Klasy ze ścieżki kompilacji projektu dodane ręcznie wymagają ręcznego dołączenia powiązanego źródła. Źródło może znajdować się w pliku zip lub jar, w obszarze roboczym lub w systemie plików. Eclipse skanuje zip, więc twoje źródła nie muszą na przykład znajdować się w katalogu głównym pliku archiwum.
  • Klasy z zależności pochodzących z innych wtyczek (maven, PDE itp.). W takim przypadku to od wtyczki zależy, w jaki sposób zostanie podane źródło.
    • Środowisko PDE wymaga, aby każda wtyczka miała odpowiedni pakiet XXX.source , który zawiera źródło wtyczki. Więcej informacji można znaleźć tutaj i tutaj .
    • m2eclipse może pobierać źródła i javadocs dla zależności Maven, jeśli są one dostępne. Ta funkcja powinna być włączona w preferencjach m2eclipse (opcja nosiła nazwę „ Pobierz źródło i javadocs ”).
    • W przypadku innych wtyczek należy zapoznać się z ich dokumentacją
  • Klasy, które są ładowane z twojego projektu są automatycznie dopasowywane do źródeł z projektu.

Ale co, jeśli Eclipse nadal sugeruje dołączenie źródła, nawet jeśli poprawnie ustawię swoje klasy i ich źródła:

To prawie zawsze oznacza, że ​​Eclipse znajduje klasę z innego miejsca niż się spodziewasz. Sprawdź źródłową ścieżkę wyszukiwania, aby zobaczyć, gdzie może dojść do niewłaściwej klasy. Zaktualizuj ścieżkę zgodnie z ustaleniami.

Zaćmienie nie znajduje niczego, gdy zostanie osiągnięty punkt przerwania:

Dzieje się tak, gdy źródłowa ścieżka wyszukiwania nie zawiera klasy, która jest aktualnie ładowana w środowisku wykonawczym. Nawet jeśli klasa znajduje się w obszarze roboczym, może być niewidoczna dla konfiguracji uruchamiania, ponieważ Eclipse ściśle przestrzega ścieżki wyszukiwania źródła i dołącza tylko zależności projektu, który jest obecnie debugowany.

Wyjątkiem są pakiety debugujące w PDE . W tym przypadku, ponieważ środowisko wykonawcze składa się z wielu projektów, które nie muszą deklarować wzajemnych zależności, Eclipse automatycznie znajdzie klasę w obszarze roboczym, nawet jeśli nie jest ona dostępna w źródłowej ścieżce wyszukiwania.

Nie widzę zmiennych, gdy uderzę w punkt przerwania lub po prostu otwiera źródło, ale nie wybiera linii punktu przerwania:

Oznacza to, że w środowisku wykonawczym ani JVM, ani same klasy nie mają niezbędnych informacji debugowania. Za każdym razem, gdy kompilowane są klasy, można dołączyć informacje debugowania. Aby zmniejszyć przestrzeń dyskową klas, czasami informacje te są pomijane, co sprawia, że ​​debugowanie takiego kodu jest uciążliwe. Jedyną szansą jest próba ponownej kompilacji z włączonym debugowaniem.

Przeglądarka źródeł Eclipse pokazuje inne linie niż te, które są faktycznie wykonywane:

Czasami może pokazywać, że jest również wykonywane puste miejsce. Oznacza to, że twoje źródła nie pasują do twojej wersji środowiska wykonawczego klas. Nawet jeśli uważasz, że nie jest to możliwe, upewnij się, że skonfigurowałeś właściwe źródła. Lub środowisko wykonawcze pasuje do najnowszych zmian, w zależności od tego, co próbujesz zrobić.


Doskonała odpowiedź! Brak odpowiedzi w tej odpowiedzi dotyczy pakietów OSGi: Eclipse może znaleźć źródło, jeśli pakiet zawiera OSGI-OPT / src, a pakiet znajduje się na ścieżce kompilacji projektu Eclipse. Zobacz ten inny element stackoverflow, aby uzyskać szczegółowe informacje: stackoverflow.com/questions/9720483/…
buzz3791 28.04.16

Być może można spojrzeć na to - jestem z rzeczy, aby spróbować już ..
displayname

Dobrze wiedzieć. Dużo teorii, ale nie ma praktycznego rozwiązania.
MasterJoe2

11

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

„Podczas pracy w trybie debugowania kliknij prawym przyciskiem myszy działający wątek (w zakładce wątków) i wybierz Edytuj wyszukiwanie źródła. W tym momencie powinieneś być w stanie dodać niezbędny projekt / słoik zawierający kod źródłowy.”

W ten sposób dodałem swój obecny projekt i to rozwiązało mój problem


Musiałem to zrobić w widoku Debugowanie, w sekcji „Zdalna aplikacja Java” lub „Java HotSpot VM”.
Abdull,

9

Miałem podobny problem z moim projektem Eclipse maven. Długo walczyłem z tym problemem, a potem próbowałem odbudować projekt

mvn clean eclipse:eclipse

i pomogło.

Uwaga: użycie tego podejścia spowoduje zamieszanie wtyczki m2e, ponieważ oba podejścia są bardzo różne. m2e dodaje do twojego projektu wirtualny węzeł o nazwie „Zależności Maven” i prosi Maven o dodanie wszystkich zależności.

mvn eclipse:eclipsez drugiej strony utworzy wiele pojedynczych wpisów w pliku .classpath. Eclipse zajmie się nimi tak, jakbyś ręcznie dodał pliki JAR do swojego projektu.

O ile nie wiesz, jak działa ścieżka klasy w środowisku Eclipse, takie podejście nie jest zalecane.


Tylko to działa dla mnie! mvn eclipse:eclipsedodaj zależność projektu do ścieżki kompilacji Java, aby działała. Poza tym wtyczka m2eclipse doda zależność projektu tylko w „Zależności Maven”, które w zakładce Biblioteki nie mogą znaleźć debugera.
naiwny

Nie wiem, co się stało, ale po wykonaniu tego nie widzę już moich zależności od maven w „Zależności od maven”.
nazwa wyświetlana

6

Usuń istniejącą konfigurację debugowania i utwórz nową. To powinno rozwiązać problem.


Śledziłem to i zadziałało. Być może dlatego, że dodałem również folder projektu Java na nowej karcie „Źródło” nowej konfiguracji uruchamiania / debugowania. Może po prostu dodanie brakującego folderu / projektu źródłowego do zakładki „Źródło” istniejącej konfiguracji uruchamiania / debugowania może działać bez konieczności wcześniejszego usuwania.
xilef

6

Stałem wobec tego samego problemu, podążyłem za krokami poniżej.

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

wprowadź opis zdjęcia tutaj

Widać na powyższym ekranie Jre1.8.0_12jest wybrany.

wybierz używane środowisko JRE i kliknij Edit. Teraz powinieneś zobaczyć poniższy ekran.

wprowadź opis zdjęcia tutaj

Kliknij katalog, wyszukaj Jdk, powinien on wyglądać jak poniżej. wprowadź opis zdjęcia tutaj

kliknij ok i gotowe


Zastosuj to podejście, jeśli Eclipse nie może załadować klas z środowiska wykonawczego Java (dowolnej klasy, w której pełna nazwa typu zaczyna się od java.like java.lang.String)
Aaron Digulla

4

Miałem problem, że mój Eclipse nie debugował kodu źródłowego mojego projektu. Otrzymałem pustą stronę z „Znaleziono węzeł kodu źródłowego”.

Kliknij przycisk Dołącz kod źródłowy. Następnie usuń folder „domyślny”, kliknij dodaj i przejdź do lokalizacji projektu i dołącz. To zadziałało dla mnie


3

W moim przypadku nawet po edycji wyszukiwania źródła i dodaniu projektu nie zadziałało. Skonfigurowałem ścieżkę kompilacji projektu.

wprowadź opis zdjęcia tutaj

Następnie wybrałem bibliotekę systemową JRE i działało.

wprowadź opis zdjęcia tutaj


2

Najwyraźniej Eclipse nie wie automatycznie, gdzie znajduje się kod źródłowy zależnych słoików. Nie jest jasne, dlaczego debugger nie mógł sprawdzać zmiennych po podłączeniu źródła. Jedną z możliwości jest nieprawidłowe / niezgodne źródło.

Zakładając, że masz projekt maven, a źródła zależności są pobierane i dostępne w lokalnym repozytorium, możesz zainstalować m2eclipse , wtyczkę maven eclipse i sprawdzić, czy to pomoże w rozwiązaniu problemu.


1

Być może masz kod źródłowy zależności dostępny dla Eclipse. Ale Eclipse nie zna kodu źródłowego dla kodu ładowanego dynamicznie. Np. Przez Maven.

W przypadku Maven polecam użycie wtyczki run-jetty-run:

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

Aby obejść ten problem, możesz także połączyć się z działającą maszyną JVM za pomocą debugera, a zobaczysz kod. Alternatywnie możesz użyć wtyczki Dynamic Source Lookup dla Eclipse stąd:

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

Niestety nie pomogło mi, ponieważ ma problemy ze ścieżkami systemu Windows ze spacjami.

Wypełniłem prośbę o ulepszenie Bugzilli Eclipse i jeśli zgodzisz się, że problem „Nie znaleziono źródła” powinien zniknąć na zawsze, zagłosuj na to tutaj:

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

Dzięki!

Sasa


Masz teraz moje wsparcie w sprawie tego błędu!
Abdull,

1

W moim przypadku w „Attachment Source” dodałem inny katalog projektu maven w panelu „Source Attachment Configuration”. Dodanie najnowszej wersji jar z repozytorium m2 nie działa. Nie udało się otworzyć wszystkich klas z innego projektu maven.

wprowadź opis zdjęcia tutaj

Tutaj test był moim drugim projektem maven zawierającym wszystkie źródła Java.



0

Miałem ten sam problem. W moim przypadku wyłączyłem Window-Preferences-Java-Debug [Zawieś wykonanie na nieprzechwyconych wyjątkach]. Następnie konsola pokazała prawidłowy błąd: mój użytkownik MySql nie miał uprawnień dostępu do bazy danych. Zgodnie z tym tematem.


0

Informacja: Jest to możliwe rozwiązanie, jeśli używasz maven (pom.xml) z kilkoma projektami.

Jeśli pracujesz z maven, upewnij się, jaką wersję bierzesz zgodnie z pom.xml (np. 1.0.1-SNAPSHOT). Możliwe, że twój kod jest aktualny, ale twoje zależności pom.xml nadal pobierają stare pliki JAR / Snapshots (ze starym kodem).

Znalezienie problemu:

  • Spróbuj debugować odpowiedni plik.
  • Dlatego ustaw punkt przerwania w odpowiednim obszarze kodu.
  • Kiedy pojawi się „source not found” , upewnij się, że masz powiązanie w odpowiednim projekcie (gdzie można znaleźć plik .java).
  • Plik kompilacji .class otwiera się w edytorze IDE.
  • Kliknij „Link with Editor”, aby znaleźć odpowiedni plik JAR / Snapshot.
  • Teraz upewnij się, że ten plik JAR jest najnowszy. Być może jest nowszy. W takim przypadku wpisz najnowszy numer wersji w pliku pom.xml.
  • Następnie wykonaj aktualizację maven i skompiluj (np. „Mvn clean install -U”) we właściwym katalogu projektu.

0

Jeśli korzystasz z platformy Eclipse lub STS, zainstaluj i użyj GC (wtyczka GrepCode), przez pewien czas nie musisz dołączać źródłowego pliku .zip do ścieżki projektu, aby GrepCode działał dobrze.


0

Mam podobny problem związany z debugowaniem serwera Glassfish w Eclipse. Zostało to spowodowane załadowaniem kodu źródłowego z innego repozytorium (zmiana z SVN na GitHub). W trakcie tego procesu serwer Glassfish użył niewłaściwych skompilowanych klas, a zatem źródło i czas działania nie byłyby zsynchronizowane z punktami przerwania pojawiającymi się na pustych liniach.

Aby rozwiązać ten problem, zmień nazwę lub usuń górny folder katalogu klas, a Glassfish odtworzy całe drzewo katalogów klas, w tym zaktualizuje pliki klas z poprawnie skompilowaną wersją.

Katalog klas znajduje się w: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <your Web Application> / WEB-INF / klas


0

W moim przypadku z projektami tomcat sprawdziłem tutaj projekt: Okno - Preferencje - Tomcat - Ścieżka źródłowa - Dodaj projekty Java do ścieżki źródłowej


0

W moim przypadku wersja Maven innego przywoływanego projektu nie pasowała do wersji projektu testowego. Gdy były takie same, problem zniknął.


0

Podczas pracy w trybie debugowania kliknij opcję Edytuj wyszukiwanie źródła po zawieszeniu w wątku. W tym momencie powinniśmy być w stanie dodać niezbędny projekt / słoik zawierający kod źródłowy. Po tym, jak dodałem swój obecny projekt w ten sposób, rozwiązało to mój problem. Dzięki



0

Miałem ten problem podczas pracy nad kodem Java, aby wykonać proces na pliku Excel zawierającym zestaw danych, a następnie przekonwertować go do pliku .csv, próbowałem odpowiedzi na ten post, ale one nie działały. problemem były same pliki jar. po pobraniu potrzebnych plików jar jeden po drugim (starsze wersje) i dodaniu ich do mojego projektu, błąd „nie znaleziono źródła” zniknął. może możesz sprawdzić swoje pliki jar. mam nadzieję, że to pomoże.


0

to zadziałało dla mnie

kliknij prawym przyciskiem myszy projekt -> Właściwości -> Wdrożenie Zespół -> dodaj swój słoik


0

Przejdź do konfiguracji debugowania w środowisku Eclipse i użyj poniżej celu, aby uruchomić aplikację.

-Dmaven.surefire.debug

na przykład

-Dmaven.surefire.debug exec: java


0

Cóż, oto co dla mnie zadziałało. Wypróbowałem wszystkie możliwe rozwiązania StackOverflow, które tam były. Próbowałem zmienić lokalizację źródła w menu debugowania, zainstalowałem wtyczkę m2e Eclipse, zmieniłem z osadzonego Maven, zainstalowałem run-jetty-run i nic nie działało. Teraz zastrzeżę, że nie próbowałem przeglądać kodu źródłowego osoby zewnętrznej, chciałem tylko zobaczyć mój własny kod, ale za każdym razem, gdy „wkraczałem” do moich metod, które napisałem, które były w MOIM projekcie, otrzymałem Błąd „Znaleziono źródło”.

Po tym, jak w końcu zapytałem eksperta, moim problemem było to, że pierwszą rzeczą, którą robiła Eclipse, było wywołanie ClassLoadera, co widać ze stosu debugowania. Wszystko, co musiałem zrobić, to F6 (krok wstecz), a potem zabrało mnie to z powrotem do mojego pierwotnego połączenia, a następnie F5 (krok do przodu). I był mój kod. Westchnienie ... takie proste rozwiązanie, ale stracona godzina.


0

Dla początkujących,

Istnieje możliwość, że plik jar jest częścią projektu, który nie został jeszcze uwzględniony w obszarze roboczym Eclipse.

W tym celu musisz znać nazwę projektu pliku jar. Powiedzmy na przykład, że jego abc -18.0.0-SNAPSHOT.jar oznacza, że ​​projekt, który powinien zostać uwzględniony w obszarze roboczym, to abc .


0

Miałem ten sam problem z Eclipse 2019-03 (4.11.0) i byłem w stanie rozwiązać ten problem tylko poprzez debugowanie za pomocą zdalnego debugowania zamiast bezpośredniego uruchamiania go w trybie debugowania.


0

Załącz źródło -> Dodaj -> Archiwum zewnętrzne -> wybierz jar -> otwórz -> gotowe

haczykiem jest poszukiwanie słoika ze źródłami i dołączenie tego słoika.

na przykład jar kończy się na „-sources” Stax2-api-3.4.1-sources


-1

Jeśli próbujesz debugować projekt maven java, a zaćmienie nie może znaleźć Twojego źródła, wypróbuj jedno z nich.

  1. Spróbuj dodać te linie w pliku pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Spróbuj maven-> aktualizacja, a następnie debuguj

  1. Przejdź do katalogu głównego projektu;

mvn eclipse: eclipse

teraz spróbuj debugować


-1

W eclipse photon spróbuj wyłączyć „Window-> Preferencje-> Java-> Debug-> Użyj zaawansowanego wyszukiwania źródła”

Edycja: W tej wersji zaćmienia występuje podobny błąd, który prowadzi do komunikatu „nie znaleziono źródła” podczas debugowania aplikacji Java. Więcej informacji można znaleźć w raporcie o błędzie bugs.eclipse.org/bugs/show_bug.cgi?id=537699


Ok, w tej wersji zaćmienia występuje podobny błąd, który prowadzi do komunikatu „nie znaleziono źródła” podczas debugowania aplikacji Java. Więcej szczegółów można znaleźć w raporcie o błędzie bugs.eclipse.org/bugs/show_bug.cgi?id=537699
6
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.