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!

Jonathan
źródł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”.

Thorbjørn Ravn Andersen
źródło
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.

Douglas Frari
źródło
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ć.

Danail Nachev
źródło
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

Vering
źródło
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.

krzysiek.ste
źródło
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.

Rajneesh Sekharmantri
źródło
Ś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

Varun
źródło
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

wazon
źródło
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

Germa Vinsmoke
źródło
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.

Raghuram
źródło
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

ssasa
źródło
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.

Szczęściarz
źródło
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.

Alex
źródło
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.
Birol Efe
źródło
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.

Daniel Adenew
źródło
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

użytkownik3035873
źródło
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

użytkownik3132194
źródło
0

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

maarten
źródło
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

Joga
źródło
0

Jeśli chcesz dołączyć kod źródłowy do dowolnego pliku JAR przez automatyczne pobieranie, spróbuj użyć tej wtyczki Eclipse Java Source Attacher

wprowadź opis zdjęcia tutaj

KrishPrabakar
źródło
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.

simin
źródło
0

to zadziałało dla mnie

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

TajnosAgentos
źródło
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

Vishvesh Phadnis
źródło
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.

Chris C.
źródło
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 .

Shobhit Mittal
źródło
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.

Kai
źródło
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

kranti
źródło
-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ć

Rajan
źródło
-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

6pi
źródło
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