Débogage Java Eclipse: source introuvable

179

Lors du débogage d'une application java dans eclipse, je reçois une erreur « Source non trouvée » dans deux cas:

  • Accéder à un fichier dans un autre projet déjà importé
  • Accéder à un fichier dans un référentiel maven installé

Les fichiers sont là, mais eclipse ne les entrera pas, à la place, il affiche un bouton pour " attacher la source "

J'ai essayé de joindre (ce qui a ouvert une boîte de dialogue pour définir une variable?!) Et eclipse a accédé au fichier, mais le débogueur n'a pu inspecter aucune variable. Attacher manuellement la source pour chaque dépendance n'est pas pratique, car dans mon cas, il existe des milliers de fichiers de dépendances.

Je suis nouveau dans eclipse \ java donc une explication de pourquoi cela se produit + comment résoudre cela aiderait beaucoup!

Jonathan
la source

Réponses:

53

Le débogage Eclipse fonctionne avec la classe réellement chargée par le programme.

Les symptômes que vous décrivez semblent indiquer que la classe en question n'a pas été trouvée dans le projet, mais dans un fichier jar de distribution sans informations de débogage trouvées avant le projet avec lequel vous travaillez.

Cela peut se produire pour plusieurs raisons, mais regardez l'emplacement où se trouvent les classes présentant ce comportement (regardez dans le volet de navigation pour l'identifier). Vous devrez probablement modifier le chemin de génération du projet pour éviter d'utiliser ce fichier jar et demander à la JVM d'utiliser le projet à la place.

EDIT: Notez qu'à partir de 2018, il est courant d'utiliser un framework de construction comme Maven, où le chemin de construction est géré par le plugin m2e, ce problème devrait donc être très moins fréquent que lorsque la question a été posée. Si vous utilisez Maven et m2e, assurez-vous d'activer Préférences / Maven / "Télécharger les sources d'artefacts" ou cliquez avec le bouton droit sur le projet, Maven / "Télécharger les sources".

Thorbjørn Ravn Andersen
la source
salut merci pour tout mais j'ai trouvé cette réponse plus utile (lien stack over flow) [ stackoverflow.com/questions/5815013/…
shareef
11
@shareef ce lien concerne le javadoc manquant, pas la source manquante.
Thorbjørn Ravn Andersen
@ACV Eh bien, oui. Ce n'est peut-être pas aussi élaboré que vous le souhaiteriez - pourriez-vous me dire ce que vous aimeriez mieux expliquer?
Thorbjørn Ravn Andersen
la réponse est une autre façon de dire: le problème est "source non trouvée", et ma suggestion est "essayer de trouver la source"
Junchen Liu
1
@dhein Pensez à ouvrir une nouvelle question avec beaucoup plus de détails.
Thorbjørn Ravn Andersen
301

Seulement 3 étapes pour configurer Eclipse IDE:

Remarque: après avoir mis à jour les chemins de recherche de source, vous devrez arrêter et redémarrer votre session de débogage. Sinon, le fichier avec la source manquante continuera à afficher «source manquante».

Modifier la recherche de source Sélectionnez la commande Modifier la recherche de source ... [Modifier la recherche de source] pour ouvrir la boîte de dialogue Chemin de source, qui vous permet de modifier le chemin de recherche de source de la cible de débogage sélectionnée.

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

IMPORTANT Redémarrez Eclipse après cette dernière étape.

Douglas Frari
la source
7
La modification de la recherche de source a fonctionné pour moi. Merci Douglas Frari
stephen ebichondo
3
Fonctionne comme un charme. Merci!
Carlos Spohr
11
et si même cela ne fonctionne pas ... parce que cela ne fonctionne pas pour moi
Saras Arya
11
Important!! Cela a bien fonctionné, mais seulement APRÈS avoir arrêté l'application en cours d'exécution et l'ai redémarrée. Jusqu'à ce que je fasse cela, il semblait qu'il ne pouvait toujours pas obtenir les sources.
Jeach
1
Je m'occupe de ça de temps en temps depuis des mois. Cela a parfaitement fonctionné.
aCarella
45

Les symptômes décrivent parfaitement le cas où la classe trouvée n'a pas de source associée (ou attribuée).

  • Vous pouvez associer les sources des classes JDK dans Préférences> Java> JRE installé . Si JRE (et non JDK) est détecté comme JRE par défaut à utiliser, vos classes JDK n'auront pas de sources attachées. Notez que toutes les classes JDK n'ont pas fourni de sources, certaines d'entre elles sont distribuées sous forme binaire uniquement.
  • Les classes du chemin de construction du projet, ajoutées manuellement, nécessitent que vous attachez manuellement la source associée. La source peut résider dans un fichier zip ou jar, dans l'espace de travail ou dans le système de fichiers. Eclipse analysera le zip, de sorte que vos sources ne doivent pas nécessairement être à la racine du fichier d'archive, par exemple.
  • Classes, issues de dépendances provenant d'autres plugins (maven, PDE, etc.). Dans ce cas, c'est au plugin comment la source sera fournie.
    • PDE exigera que chaque plugin ait le bundle XXX.source correspondant , qui contient la source du plugin. Plus d'informations peuvent être trouvées ici et ici .
    • m2eclipse peut récupérer les sources et les javadocs pour les dépendances Maven s'ils sont disponibles. Cette fonctionnalité devrait être activée dans les préférences de m2eclipse (l'option a été nommée quelque chose comme " Télécharger la source et les javadocs ".
    • Pour les autres plugins, vous devrez consulter leur documentation
  • Les classes chargées à partir de votre projet sont automatiquement mises en correspondance avec les sources du projet.

Mais que se passe-t-il si Eclipse vous suggère toujours d'attacher la source, même si j'ai correctement défini mes classes et leurs sources:

Cela signifie presque toujours qu'Eclipse trouve la classe d'un endroit différent de celui auquel vous vous attendez. Inspectez votre chemin de recherche source pour voir où il pourrait obtenir la mauvaise classe. Mettez à jour le chemin en fonction de vos résultats.

Eclipse ne trouve rien du tout, lorsque le point d'arrêt est atteint:

Cela se produit, lorsque vous êtes source, le chemin de recherche ne contient pas la classe actuellement chargée dans le runtime. Même si la classe est dans l'espace de travail, elle peut être invisible pour la configuration de lancement, car Eclipse suit strictement le chemin de recherche de source et attache uniquement les dépendances du projet, qui est actuellement débogué.

Les bundles de débogage dans PDE constituent une exception . Dans ce cas, comme l'environnement d'exécution est composé de plusieurs projets, qui n'ont pas à déclarer de dépendances les uns sur les autres, Eclipse trouvera automatiquement la classe dans l'espace de travail, même si elle n'est pas disponible dans le chemin de recherche source.

Je ne peux pas voir les variables lorsque j'atteins un point d'arrêt ou qu'il ouvre simplement la source, mais ne sélectionne pas la ligne de point d'arrêt:

Cela signifie que lors de l'exécution, la JVM ou les classes elles-mêmes ne disposent pas des informations de débogage nécessaires. Chaque fois que les classes sont compilées, des informations de débogage peuvent être jointes. Pour réduire l'espace de stockage des classes, ces informations sont parfois omises, ce qui complique le débogage de ce code. Votre seule chance est d'essayer de recompiler avec le débogage activé.

Le visualiseur de source Eclipse affiche des lignes différentes de celles qui sont réellement exécutées:

Cela peut parfois montrer que l'espace vide est également exécuté. Cela signifie que vos sources ne correspondent pas à votre version d'exécution des classes. Même si vous pensez que ce n'est pas possible, c'est le cas, alors assurez-vous de configurer les bonnes sources. Ou votre environnement d'exécution correspond à vos dernières modifications, en fonction de ce que vous essayez de faire.

Danail Nachev
la source
Excellente réponse! Une information manquante dans cette réponse est spécifique aux bundles OSGi: Eclipse peut trouver la source si un bundle contient OSGI-OPT / src et que le bundle est sur le chemin de construction d'un projet Eclipse. Voir cet autre article stackoverflow pour plus de détails: stackoverflow.com/questions/9720483/…
buzz3791
Peut-être que vous pouvez jeter un oeil à ceci - je n'ai plus de choses à essayer déjà ..
displayname
Bon à savoir. Beaucoup de théorie, mais pas de solution pratique.
MasterJoe2
11

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

"Lors de l'exécution en mode débogage, cliquez avec le bouton droit sur le thread en cours d'exécution (dans l'onglet threads) et sélectionnez Modifier la recherche de source. À ce stade, vous devriez être en mesure d'ajouter le projet / jar nécessaire qui contient votre code source."

J'ai ajouté mon projet actuel de cette façon, et cela a résolu mon problème

Vering
la source
Je devais le faire dans la vue Debug, là sous "Remote Java Application" ou "Java HotSpot VM".
Abdull
9

J'ai eu un problème similaire avec mon projet eclipse maven. Je me suis battu avec ce problème assez longtemps, puis j'ai essayé de reconstruire le projet avec

mvn clean eclipse:eclipse

et cela a aidé.

Remarque: l'utilisation de cette approche confondra le plugin m2e car les deux approches sont très différentes. m2e ajoute un nœud virtuel à votre projet appelé "Maven Dependencies" et demande à Maven d'y ajouter toutes les dépendances.

mvn eclipse:eclipse, d'autre part, créera de nombreuses entrées individuelles dans le fichier .classpath. Eclipse les gérera comme si vous ajoutiez manuellement des fichiers JAR à votre projet.

À moins que vous ne sachiez comment fonctionne le chemin de classe dans Eclipse, cette approche n'est pas recommandée.

krzysiek.ste
la source
Seulement cela fonctionne pour moi aussi! mvn eclipse:eclipseajoutez une dépendance de projet au chemin de construction java, pour que cela fonctionne. De plus, le plugin m2eclipse ajoutera la dépendance du projet uniquement dans "Maven Dependencies" qui dans l'onglet Bibliothèques, et le débogueur ne peut pas trouver.
naïf
Je ne sais pas ce qui s'est passé mais après avoir exécuté cela, je ne vois plus mes dépendances maven sous "Dépendances Maven".
displayname
6

Supprimez la configuration de débogage existante et créez-en une nouvelle. Cela devrait résoudre le problème.

Rajneesh Sekharmantri
la source
J'ai suivi cela et cela a fonctionné. Peut-être parce que j'ai également ajouté le dossier de projet java souhaité dans l'onglet 'Source' de la nouvelle configuration d'exécution / débogage. Peut-être que simplement ajouter le dossier / projet source manquant à l'onglet «Source» de la configuration d'exécution / débogage existante peut fonctionner sans avoir à le supprimer au préalable.
xilef
6

J'étais confronté au même problème, j'ai suivi les étapes ci-dessous.

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

entrez la description de l'image ici

Vous voyez dans l'écran ci-dessus Jre1.8.0_12est sélectionné.

sélectionnez le JRE que vous utilisez et cliquez sur Edit. Vous devriez maintenant voir l'écran ci-dessous.

entrez la description de l'image ici

Cliquez sur le répertoire, recherchez Jdk, cela devrait ressembler à l'écran ci-dessous. entrez la description de l'image ici

cliquez ok, et c'est fait

Varun
la source
Utilisez cette approche si Eclipse ne peut pas charger de classes à partir du runtime Java (toute classe où le nom de type complet commence par java.like java.lang.String)
Aaron Digulla
4

J'ai eu le problème que mon Eclipse ne déboguait pas le code source de mon projet. J'obtenais une page vierge avec "Nœud de code source trouvé".

Veuillez cliquer sur le bouton Joindre le code source. Supprimez ensuite le dossier "par défaut" puis cliquez sur Ajouter et accédez à l'emplacement de votre projet et attachez-le. Cela a fonctionné pour moi

un vase
la source
3

Dans mon cas, même après la modification de la recherche de source et l'ajout d'un projet, cela n'a pas fonctionné. J'ai configuré le chemin de construction du projet.

entrez la description de l'image ici

Après cela, j'ai sélectionné la bibliothèque système JRE et cela a fonctionné.

entrez la description de l'image ici

Germa Vinsmoke
la source
2

Evidemment, Eclipse ne sait pas automatiquement où se trouve le code source des fichiers JAR dépendants. Il n'est pas clair pourquoi le débogueur n'a pas pu inspecter les variables une fois la source attachée. Une possibilité est une source incorrecte / incompatible.

En supposant que vous avez un projet maven et que les sources des dépendances sont téléchargées et disponibles dans le référentiel local, vous pouvez installer m2eclipse , le plugin maven eclipse et voir si cela aide à résoudre votre problème.

Raghuram
la source
1

Vous pouvez avoir le code source d'une dépendance accessible à Eclipse. Mais Eclipse ne connaît pas le code source du code chargé dynamiquement. Par exemple via Maven.

Dans le cas de Maven, je vous recommande d'utiliser le plugin run-jetty-run:

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

Pour contourner ce problème, vous pouvez également vous connecter à une machine virtuelle Java en cours d'exécution avec le débogueur et vous verrez le code. Vous pouvez également utiliser le plugin Dynamic Source Lookup pour Eclipse à partir d'ici:

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

Malheureusement, cela ne m'a pas aidé car il a des problèmes avec les chemins Windows avec des espaces.

J'ai rempli une demande d'amélioration sur Eclipse Bugzilla et si vous acceptez que le problème "Source non trouvée" devrait disparaître pour toujours, veuillez voter ici:

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

Merci!

Sasa

ssasa
la source
Vous avez maintenant mon soutien sur ce bug!
Abdull du
1

Dans mon cas, dans "Attach Source", j'ai ajouté l'autre répertoire de projet maven dans le panneau "Source Attachment Configuration". L'ajout de la dernière version jar du référentiel m2 ne fonctionnera pas. Toutes les classes de l'autre projet maven n'ont pas pu s'ouvrir.

entrez la description de l'image ici

Ici, le test était mon autre projet maven contenant toutes les sources java.

Chanceux
la source
1

Cliquez sur -> Modifier le chemin de recherche de la source

ensuite

Cliquez sur -> Ajouter enfin sélectionnez le projet Java et sélectionnez le chemin du projet.

Source: https://www.youtube.com/watch?v=IGIKPY6q1Qw

Oguzhan Cevik
la source
cela a fonctionné pour moi!
Ishank le
0

J'ai eu le même problème. Dans mon cas, j'ai désactivé Window-Preferences-Java-Debug [Suspend execution on uncaught exceptions]. Ensuite, la console m'a montré l'erreur correcte: mon utilisateur MySql n'avait pas les privilèges pour accéder à la base de données. Selon ce sujet.

Alex
la source
0

Info: C'est une solution possible, lorsque vous utilisez maven (pom.xml) avec quelques projets.

Si vous travaillez avec maven, assurez-vous quelle version vous prenez à l'intérieur du pom.xml correspondant (par exemple 1.0.1-SNAPSHOT). Il est possible que votre code soit à jour, mais vos dépendances pom.xml prennent toujours les anciens JAR / Snapshots (avec l'ancien code).

Trouver le problème:

  • Essayez de déboguer le fichier correspondant.
  • Par conséquent, définissez un point d'arrêt dans la zone de code appropriée.
  • Lorsque "source introuvable" apparaît, assurez-vous de lier dans le bon projet (où le fichier .java peut être trouvé).
  • Le fichier de compilation .class s'ouvre dans l'éditeur IDE.
  • Cliquez sur "Lier avec l'éditeur" pour trouver le JAR / Snapshot correspondant.
  • Assurez-vous maintenant que ce JAR est le plus récent. Il y en a peut-être un plus récent. Dans ce cas, écrivez le numéro de version le plus récent dans le fichier pom.xml.
  • Ensuite, faites une mise à jour maven et compilez (par exemple "mvn clean install -U") dans le bon répertoire de projet.
Birol Efe
la source
0

Si vous êtes sur eclipse ou STS, veuillez installer et utiliser GC (GrepCode Plugin), parfois vous n'avez pas besoin de joindre le fichier source .zip dans le chemin de votre projet afin que GrepCode fonctionne bien pour vous.

Daniel Adenew
la source
0

J'ai eu un problème lié au débogage du serveur Glassfish dans Eclipse. Cela a été provoqué par le chargement du code source à partir d'un référentiel différent (passant de SVN à GitHub). Dans le processus, les mauvaises classes compilées ont été utilisées par le serveur Glassfish et, par conséquent, la source et le temps d'exécution seraient désynchronisés avec les points d'arrêt apparaissant sur des lignes vides.

Pour résoudre ce problème, renommez ou supprimez le dossier supérieur du répertoire des classes et Glassfish recréera toute l'arborescence du répertoire de classe, y compris la mise à jour des fichiers de classe avec la version correctement compilée.

Le répertoire classes se trouve dans: / workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <votre application Web> / WEB-INF / classes

utilisateur3035873
la source
0

Dans mon cas avec les projets tomcat, j'ai vérifié le projet ici: Fenêtre - Préférences - Tomcat - Chemin source - Ajouter des projets java au chemin source

user3132194
la source
0

Dans mon cas, la version Maven de l'autre projet référencé ne correspondait pas à la version du projet de test. Une fois qu'ils étaient identiques, le problème a disparu.

Maarten
la source
0

Lors de l'exécution en mode débogage, cliquez sur Modifier la recherche de source après avoir été suspendu du thread. À ce stade, nous devrions être en mesure d'ajouter le projet / jar nécessaire qui contient votre code source. Après avoir ajouté mon projet actuel de cette manière, cela a résolu mon problème. Merci

Yoga
la source
0

Si vous souhaitez attacher du code source à n'importe quel JAR par téléchargement automatique, essayez d'utiliser ce plugin Eclipse Java Source Attacher

entrez la description de l'image ici

KrishPrabakar
la source
0

J'ai eu ce problème en travaillant sur du code java pour traiter un fichier Excel contenant un ensemble de données, puis le convertir en fichier .csv, j'ai essayé des réponses à ce message, mais elles n'ont pas fonctionné. le problème était les fichiers jar eux-mêmes. après avoir téléchargé les fichiers jar nécessaires un par un (versions plus anciennes) et les ajouter à mon projet, l'erreur "source non trouvée" a disparu. peut-être que vous pouvez vérifier vos fichiers jar. espérons que cela aiderait.

simin
la source
0

cela a fonctionné pour moi

faites un clic droit sur le projet -> Propriétés -> Assemblage de déploiement -> ajoutez votre jar

TajnosAgentos
la source
0

Accédez à la configuration de débogage dans eclipse et utilisez l'objectif ci-dessous pour exécuter votre application.

-Dmaven.surefire.debug

par exemple

-Dmaven.surefire.debug exec: java

Vishvesh Phadnis
la source
0

Eh bien, voici ce qui a fonctionné pour moi. J'ai essayé toutes les solutions possibles sur StackOverflow. J'ai essayé de changer mon emplacement source dans le menu de débogage, j'ai installé le plugin m2e Eclipse, j'ai changé de Maven intégré, et j'ai installé run-jetty-run et rien n'a fonctionné. Maintenant, je tiens à préciser que je n'essayais pas de voir le code source d'une personne externe, je voulais juste voir mon propre code, mais chaque fois que je "suis entré" dans mes méthodes que j'ai écrites et qui étaient dans MON projet, j'ai obtenu le Erreur "Source maintenant trouvée".

Après avoir finalement demandé à un expert, mon problème était que la première chose qu'Eclipse faisait était d'appeler un ClassLoader, que vous pouvez voir à partir de la pile de débogage. Tout ce que j'avais à faire était F6 (pas en avant), puis cela m'a ramené à mon appel d'origine, puis F5 (en). Et il y avait mon code. Soupir ... une solution si simple mais une heure perdue.

Chris C
la source
0

Pour les débutants,

Il est possible que le fichier jar fasse partie du projet que vous n'avez pas encore inclus dans l'espace de travail Eclipse.

Pour cela, vous devez connaître le nom du projet du fichier jar. Disons, par exemple, son abc -18.0.0-SNAPSHOT.jar, cela signifie que le projet que vous êtes censé inclure dans votre espace de travail est abc .

Shobhit Mittal
la source
0

J'ai eu le même problème avec eclipse 2019-03 (4.11.0) et je n'ai pu résoudre cela qu'en effectuant le débogage via le débogage à distance au lieu de le lancer directement en mode débogage.

Kai
la source
0

Joindre la source -> Ajouter -> Archive externe -> sélectionnez le pot -> ouvrir -> terminé

le hic est de chercher le pot de sources et d'attacher ce pot.

par exemple, le jar se termine par "-sources" Stax2-api-3.4.1-sources

kranti
la source
-1

Si vous essayez de déboguer votre projet maven java et qu'eclipse ne parvient pas à trouver votre source, essayez l'un de ceux-ci.

  1. Essayez d'ajouter ces lignes dans le pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Essayez maven-> update puis déboguez

  1. Accédez au répertoire racine du projet;

mvn eclipse: éclipse

essayez maintenant de déboguer

Rajan
la source
-1

Dans eclipse photon, essayez de désactiver "Fenêtre-> Préférences-> Java-> Débogage-> Utiliser la recherche avancée de source"

Edit: Il y a un bogue lié dans cette version d'Eclipse qui conduit à un message "source not found" lors du débogage des applications Java. Voir le rapport de bogue bugs.eclipse.org/bugs/show_bug.cgi?id=537699 pour plus de détails

6pi
la source
Ok, il y a un bogue lié dans cette version d'Eclipse qui conduit à un message "source non trouvée" lors du débogage des applications Java. Voir le rapport de bogue bugs.eclipse.org/bugs/show_bug.cgi?id=537699 pour plus de détails
6pi