Debug java Eclipse: sorgente non trovata


179

Durante il debug di un'app Java in Eclipse ricevo un errore " Origine non trovata " in due casi:

  • Accedere a un file in un altro progetto che è già stato importato
  • Accedere a un file in un repository maven installato

I file sono lì, ma eclipse non entrerà in essi, invece mostra un pulsante per " allegare sorgente "

Ho provato ad allegare (che ha aperto una finestra di dialogo per definire una variabile ?!) ed eclipse è passato al file, ma il debugger non ha potuto ispezionare alcuna variabile lì. Anche collegare manualmente l'origine per ogni dipendenza non è pratico, poiché nel mio caso ci sono migliaia di file di dipendenza.

Sono nuovo di eclissi \ java, quindi una spiegazione del perché questo sta accadendo + come risolverlo sarebbe di grande aiuto!

Risposte:


53

Il debug di Eclipse funziona con la classe effettivamente caricata dal programma.

I sintomi che descrivi sembrano che la classe in questione non è stata trovata nel progetto, ma in un barattolo di distribuzione senza informazioni di debug trovate prima del progetto con cui stai lavorando.

Questo può accadere per diversi motivi, ma dai un'occhiata alla posizione in cui si trovano le classi che mostrano questo comportamento (cerca nel riquadro di navigazione per identificarlo). Molto probabilmente dovrai cambiare il percorso di compilazione del progetto per evitare di usare questo jar e far sì che la JVM usi il progetto.

EDIT: Nota che a partire dal 2018 è comune utilizzare un framework di build come Maven, in cui il percorso di build è gestito dal plug-in m2e, quindi questo problema dovrebbe essere molto meno frequente rispetto a quando è stata posta la domanda. Se usi Maven e m2e, assicurati di abilitare Preferenze / Maven / "Scarica fonti artefatto" o fai clic con il pulsante destro del mouse sul progetto, Maven / "Scarica fonti".


Ciao grazie per tutto, ma ho trovato la risposta più utile (stack collegamento flusso sopra) [ stackoverflow.com/questions/5815013/...
Shareef

11
@shareef quel link riguarda la mancanza di javadoc, non la fonte mancante.
Thorbjørn Ravn Andersen l'

@ACV Bene, sì. Forse non è così elaborato come vorresti: potresti farmi sapere cosa vorresti avere spiegato meglio?
Thorbjørn Ravn Andersen,

la risposta è un altro modo di dire: il problema è "fonte non trovata", e il mio suggerimento è "prova a trovare la fonte"
Junchen Liu,

1
@dhein Valuta di aprire una nuova domanda con molti più dettagli.
Thorbjørn Ravn Andersen,

301

Solo 3 passaggi per la configurazione dell'IDE Eclipse:

Nota: dopo aver aggiornato i percorsi di ricerca di origine, dovrai interrompere e riavviare la sessione di debug. In caso contrario, il file con l'origine mancante continuerà a mostrare "origine mancante".

Modifica ricerca sorgente Selezionare il comando Modifica ricerca sorgente ... [Modifica ricerca sorgente] per aprire la finestra di dialogo Percorso sorgente, che consente di apportare modifiche al percorso di ricerca sorgente della destinazione di debug selezionata.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

IMPORTANTE Riavvia Eclipse dopo quest'ultimo passaggio.


7
La modifica della ricerca sorgente ha funzionato davvero per me. Grazie Douglas Frari
stephen ebichondo,

3
Funziona come un fascino. Grazie!
Carlos Spohr,

11
e se anche quello non funzionasse ... perché non funziona per me
Saras Arya,

11
Importante!! Ha funzionato bene, ma solo DOPO aver interrotto l'applicazione in esecuzione e riavviata. Fino a quando non l'ho fatto, mi è sembrato che non fosse ancora possibile ottenere le fonti.
Jeach

1
Ho avuto a che fare con questo acceso e spento per mesi. Questo ha funzionato perfettamente.
aCarella,

45

I sintomi descrivono perfettamente il caso in cui la classe trovata non ha origine associata (o assegnata).

  • È possibile associare i sorgenti per le classi JDK in Preferenze> Java> JRE installato . Se JRE (non JDK) viene rilevato come JRE predefinito da utilizzare, le classi JDK non avranno origini collegate. Si noti che, non tutte le classi JDK hanno fornito origini, alcune di esse sono distribuite solo in forma binaria.
  • Le classi dal percorso di compilazione del progetto, aggiunte manualmente, richiedono di collegare manualmente l'origine associata. Il sorgente può risiedere in un file zip o jar, nell'area di lavoro o nel filesystem. Eclipse eseguirà la scansione dello zip, quindi le tue fonti non devono trovarsi nella radice del file di archivio, ad esempio.
  • Classi, da dipendenze provenienti da altri plugin (Maven, PDE, ecc.). In questo caso, dipende dal plugin come verrà fornita la fonte.
    • PDE richiederà che ogni plug-in abbia il pacchetto XXX.source corrispondente , che contiene l'origine del plug-in. Ulteriori informazioni possono essere trovate qui e qui .
    • m2eclipse può recuperare fonti e javadocs per le dipendenze Maven, se disponibili. Questa funzione dovrebbe essere abilitata nelle preferenze di m2eclipse (l'opzione era denominata come " Scarica sorgente e javadocs ".
    • Per altri plugin, dovrai consultare la loro documentazione
  • Le classi, che vengono caricate dal tuo progetto, vengono automaticamente abbinate alle fonti del progetto.

Ma cosa succede se Eclipse suggerisce ancora di collegare la fonte, anche se ho impostato correttamente le mie classi e le loro fonti:

Questo significa quasi sempre che Eclipse sta trovando la classe da un luogo diverso da quello che ti aspetti. Ispeziona il tuo percorso di ricerca sorgente per vedere dove potrebbe ottenere la classe sbagliata. Aggiorna il percorso in base alle tue scoperte.

Eclipse non trova nulla, quando viene raggiunto il punto di interruzione:

Ciò accade quando il percorso di ricerca del codice sorgente non contiene la classe, che è attualmente caricata in fase di runtime. Anche se la classe si trova nell'area di lavoro, può essere invisibile alla configurazione di avvio, poiché Eclipse segue rigorosamente il percorso di ricerca di origine e allega solo le dipendenze del progetto, che è attualmente sottoposto a debug.

Un'eccezione sono i bundle di debug in PDE . In questo caso, poiché il runtime è composto da più progetti, che non devono dichiarare dipendenze l'uno dall'altro, Eclipse troverà automaticamente la classe nell'area di lavoro, anche se non è disponibile nel percorso di ricerca di origine.

Non riesco a vedere le variabili quando colpisco un punto di interruzione o semplicemente apre la fonte, ma non seleziona la linea di punto di interruzione:

Ciò significa che nel runtime, né la JVM né le classi stesse non dispongono delle informazioni di debug necessarie. Ogni volta che vengono compilate le classi, è possibile allegare informazioni di debug. Per ridurre lo spazio di archiviazione delle classi, a volte queste informazioni vengono omesse, il che rende il debug di tale codice un problema. L'unica possibilità è provare a ricompilare con il debug abilitato.

Il visualizzatore di sorgenti Eclipse mostra linee diverse da quelle effettivamente eseguite:

A volte può mostrare che viene eseguito anche lo spazio vuoto. Ciò significa che i tuoi sorgenti non corrispondono alla tua versione runtime delle classi. Anche se pensi che ciò non sia possibile, lo è, quindi assicurati di impostare i sorgenti corretti. Oppure il tuo runtime corrisponde alle ultime modifiche, a seconda di cosa stai cercando di fare.


Risposta eccellente! Una boccola mancante da questa risposta è specifica per i bundle OSGi: Eclipse può trovare l'origine se un bundle contiene OSGI-OPT / src e il bundle si trova sul percorso di compilazione di un progetto Eclipse. Vedere questo altro elemento StackOverflow per i dettagli: stackoverflow.com/questions/9720483/...
buzz3791

Forse puoi dare un'occhiata a questo - Sono già fuori dalle cose da provare ..
displayname

Buono a sapersi. Molta teoria, ma nessuna soluzione pratica.
MasterJoe2,

11

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

"Durante l'esecuzione in modalità debug, fai clic con il pulsante destro del mouse sul thread in esecuzione (nella scheda thread) e seleziona Modifica ricerca sorgente. A questo punto, dovresti essere in grado di aggiungere il project / jar necessario che contiene il tuo codice sorgente."

Ho aggiunto il mio progetto attuale in questo modo, e ha risolto il mio problema


Ho dovuto farlo nella vista Debug, lì sotto "Applicazione Java remota" o "Java HotSpot VM".
Abdull

9

Ho avuto un problema simile con il mio progetto di eclissi maven. Ho combattuto con questo problema abbastanza a lungo, poi ho provato a ricostruire il progetto

mvn clean eclipse:eclipse

e ha aiutato.

Nota: l'utilizzo di questo approccio confonderà il plug-in m2e poiché i due approcci sono molto diversi. m2e aggiunge un nodo virtuale al tuo progetto chiamato "Dipendenze Maven" e chiede a Maven di aggiungere tutte le dipendenze lì.

mvn eclipse:eclipsed'altra parte, creerà molte voci individuali nel file .classpath. Eclipse li gestirà come se avessi aggiunto manualmente JAR al tuo progetto.

Se non sai come funziona il percorso di classe in Eclipse, questo approccio non è raccomandato.


Solo questo funziona anche per me! mvn eclipse:eclipseaggiungi la dipendenza del progetto al percorso di compilazione java, quindi funziona. Inoltre, il plugin m2eclipse aggiungerà la dipendenza del progetto solo in "Dipendenze Maven" che nella scheda Librerie e il debugger non riesce a trovare.
ingenuo

Non so cosa sia successo, ma dopo averlo eseguito non vedo più le mie dipendenze di Mven in "Dipendenze di Maven".
displayname

6

Rimuovere la configurazione di debug esistente e crearne una nuova. Questo dovrebbe risolvere il problema.


Ho seguito questo e ha funzionato. Forse perché ho anche aggiunto la cartella del progetto java desiderata nella scheda "Origine" della nuova configurazione di esecuzione / debug. Forse solo l'aggiunta della cartella / progetto di origine mancante alla scheda "Origine" della configurazione di esecuzione / debug esistente può funzionare senza dover prima eliminarla.
xilef,

6

Stavo affrontando lo stesso problema, ho seguito i seguenti passi.

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

inserisci qui la descrizione dell'immagine

Vedi nella schermata sopra Jre1.8.0_12è selezionato.

selezionare il JRE che si sta utilizzando e fare clic Edit. Ora dovresti vedere la schermata qui sotto.

inserisci qui la descrizione dell'immagine

Fai clic sulla directory, cerca Jdk, dovrebbe apparire come una schermata qui sotto. inserisci qui la descrizione dell'immagine

fai clic su OK ed è fatto


Utilizzare questo approccio se Eclipse non è in grado di caricare classi dal runtime Java (qualsiasi classe in cui il nome del tipo completo inizia con java.like java.lang.String)
Aaron Digulla

4

Ho avuto il problema che il mio Eclipse non stava eseguendo il debug del codice sorgente del mio progetto. Stavo ottenendo una pagina vuota con "Nodo codice sorgente trovato".

Fare clic sul pulsante Allega codice sorgente. Quindi eliminare la cartella "predefinita", quindi fare clic su Aggiungi e andare al percorso del progetto e allegare. Questo ha funzionato per me


3

Nel mio caso, anche dopo aver modificato la ricerca della fonte e aggiunto il progetto, non ha funzionato. Ho configurato il percorso di compilazione del progetto.

inserisci qui la descrizione dell'immagine

Successivamente, ho selezionato JRE System Library e ha funzionato.

inserisci qui la descrizione dell'immagine


2

Evidentemente, Eclipse non sa automaticamente dove si trova il codice sorgente per i barattoli dipendenti. Non è chiaro il motivo per cui il debugger non è stato in grado di ispezionare le variabili dopo aver collegato l'origine. Una possibilità è l'origine errata / incompatibile.

Supponendo che abbiate un progetto maven e che le fonti delle dipendenze siano scaricate e disponibili nel repository locale, potreste voler installare m2eclipse , il plugin maven eclipse e vedere se questo aiuta a risolvere il problema.


1

Potresti avere il codice sorgente di una dipendenza accessibile da Eclipse. Ma Eclipse non conosce il codice sorgente per il codice che viene caricato in modo dinamico. Ad esempio attraverso Maven.

In caso di Maven, ti consiglio di usare il plugin run-jetty-run:

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

Per ovviare al problema, puoi anche connetterti a una JVM in esecuzione con il debugger e vedrai il codice. In alternativa puoi utilizzare il plug-in Dynamic Source Lookup per Eclipse da qui:

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

Sfortunatamente non mi ha aiutato perché ha problemi con i percorsi di Windows con spazi.

Ho compilato una richiesta di miglioramento su Eclipse Bugzilla e se accetti che il problema "Sorgente non trovata" debba scomparire per sempre, vota qui:

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

Grazie!

Sasa


Ora hai il mio supporto per questo bug!
Abdull

1

Nel mio caso in "Allega sorgente", ho aggiunto l'altra directory del progetto maven nel pannello "Configurazione allegato sorgente". L'aggiunta dell'ultima versione del barattolo dal repository m2 non funziona. Tutte le classi dell'altro progetto maven non sono state aperte.

inserisci qui la descrizione dell'immagine

Qui il test è stato il mio altro progetto maven contenente tutte le fonti Java.



0

Ho avuto lo stesso problema. Nel mio caso, ho disabilitato Window-Preferences-Java-Debug [Sospendi l'esecuzione su eccezioni non rilevate]. Quindi, la console mi ha mostrato l'errore corretto: il mio utente MySql non aveva i privilegi per accedere al database. Secondo questo argomento.


0

Info: questa è una possibile soluzione quando usi maven (pom.xml) con un paio di progetti.

Se stai lavorando con Maven, assicurati di quale versione stai prendendo all'interno del pom.xml corrispondente (es. 1.0.1-SNAPSHOT). Potrebbe essere possibile che il tuo codice sia aggiornato, ma le tue dipendenze pom.xml stanno ancora prendendo i vecchi JAR / Istantanee (con il vecchio codice).

Trovare il problema:

  • Prova a eseguire il debug del file corrispondente.
  • Pertanto, impostare un punto di interruzione nell'area del codice pertinente.
  • Quando "fonte non trovata" , assicurati di associare il progetto giusto (dove è possibile trovare il file .java).
  • Il file di compilazione .class si apre nell'editor IDE.
  • Fare clic su "Collegamento con l'editor" per trovare il JAR / Istantanea corrispondente.
  • Ora assicurati che questo JAR sia il più recente. Forse ce n'è uno più recente. In tal caso, scrivi il numero di versione più recente in pom.xml.
  • Quindi esegui un aggiornamento e compilazione (ad esempio "mvn clean install -U") nella directory di progetto corretta.

0

Se utilizzi eclipse o STS, installa e usa GC (GrepCode Plugin), a volte non è necessario allegare il file .zip di origine al percorso del tuo progetto, quindi GrepCode funziona bene per te.


0

Ho riscontrato un problema correlato al debug del server Glassfish in Eclipse. Ciò è stato ottenuto caricando il codice sorgente da un repository diverso (passando da SVN a GitHub). Nel processo, il server Glassfish ha utilizzato classi compilate errate e, di conseguenza, l'origine e il tempo di esecuzione sarebbero fuori sincrono con i punti di interruzione visualizzati su righe vuote.

Per risolvere questo problema, rinominare o eliminare la cartella superiore della directory di classi e Glassfish ricrea l'albero di directory di tutta la classe, incluso l'aggiornamento dei file di classe con la versione compilata correttamente.

La directory delle classi si trova in: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <la tua applicazione Web> / WEB-INF / classes


0

Nel mio caso con i progetti Tomcat ho controllato il progetto qui: Finestra - Preferenze - Tomcat - Percorso sorgente - Aggiungi progetti Java al percorso sorgente


0

Nel mio caso la versione Maven dell'altro progetto referenziato non corrispondeva alla versione del progetto di test. Una volta che erano uguali, il problema è scomparso.


0

Durante l'esecuzione in modalità debug, fare clic su Modifica ricerca sorgente dopo essere stato sospeso dal thread. A questo punto, dovremmo essere in grado di aggiungere il project / jar necessario che contiene il codice sorgente. Dopo aver aggiunto il mio progetto attuale in questo modo e risolto il mio problema. Grazie



0

Ho avuto questo problema mentre lavoravo al codice java per eseguire il processo su un file Excel contenente un set di dati, quindi convertirlo in file .csv, ho provato le risposte a questo post, ma non hanno funzionato. il problema erano gli stessi file jar. dopo aver scaricato i file jar necessari uno alla volta (versioni precedenti) e averli aggiunti al mio progetto, l'errore "sorgente non trovata" è svanito. forse puoi controllare i tuoi file jar. spero che questo possa aiutare.


0

questo ha funzionato per me

fare clic con il tasto destro sul progetto -> Proprietà -> Assemblaggio di distribuzione -> aggiungere il proprio vaso


0

Vai alla configurazione di debug in eclipse e usa l'obiettivo sotto per eseguire la tua applicazione.

-Dmaven.surefire.debug

per esempio

-Dmaven.surefire.debug exec: java


0

Bene, ecco cosa ha funzionato per me. Ho provato ogni possibile soluzione su StackOverflow che esisteva. Ho provato a cambiare la mia posizione di origine nel menu di debug, ho installato il plugin m2e Eclipse, ho cambiato da Maven incorporato e ho installato run-jetty-run e niente ha funzionato. Ora avvertirò che non stavo cercando di visualizzare il codice sorgente di una persona esterna, volevo solo vedere il mio codice PROPRIO, ma ogni volta che "entravo" nei miei metodi che scrivevo che erano nel MIO progetto, ho ottenuto il Errore "Fonte ora trovata".

Dopo aver finalmente chiesto a un esperto, il mio problema era che la prima cosa che Eclipse stava facendo era chiamare un ClassLoader, che puoi vedere dallo stack di debug. Tutto quello che dovevo fare era F6 (passaggio) e poi mi riportava alla mia chiamata originale e poi F5 (passaggio). E c'era il mio codice. Sospiro ... una soluzione così semplice ma un'ora sprecata.


0

Per principianti,

È possibile che il file jar faccia parte del progetto che non è stato ancora incluso nell'area di lavoro di Eclipse.

Per questo, è necessario conoscere il nome del progetto del file jar. Supponiamo, ad esempio, il suo abc -18.0.0-SNAPSHOT.jar, significa che il progetto che dovresti includere nell'area di lavoro è abc .


0

Ho avuto lo stesso problema con eclipse 2019-03 (4.11.0) e sono stato in grado di risolverlo solo eseguendo il debug tramite debug remoto invece di avviarlo direttamente in modalità debug.


0

Allega sorgente -> Aggiungi -> Archivio esterno -> seleziona il vaso -> apri -> fatto

il trucco è cercare il vaso delle fonti e allegare questo vaso.

per esempio il vaso termina con "-sources" Stax2-api-3.4.1-sources


-1

Se stai provando a eseguire il debug del tuo progetto java maven ed eclipse non è in grado di trovare il tuo sorgente, prova uno di questi.

  1. Prova ad aggiungere queste righe in pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Prova maven-> update e quindi il debug

  1. Vai alla directory principale del progetto;

mvn eclipse: eclipse

ora prova il debug


-1

Nel fotone eclissi prova a disattivare "Finestra-> Preferenze-> Java-> Debug-> Usa ricerca sorgente avanzata"

Modifica: in questa versione di eclipse è presente un bug correlato che porta a un messaggio "sorgente non trovata" durante il debug delle applicazioni Java. Vedi bug report bugs.eclipse.org/bugs/show_bug.cgi?id=537699 per maggiori dettagli


Ok, c'è un bug correlato in questa versione di eclipse che porta a un messaggio "sorgente non trovata" durante il debug delle applicazioni Java. Vedi bug report bugs.eclipse.org/bugs/show_bug.cgi?id=537699 per maggiori dettagli
6pi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.