2008-11-07 11 views
32

Parfois, lorsque je débogue du code dans Eclipse, il m'arrive de voir et d'inspecter les variables de classe sans difficulté, mais je ne peux pas inspecter les valeurs des variables déclarées localement dans les fonctions. En passant, tous les paramètres de la fonction courante perdent leurs noms «réels» et à la place on voit leurs valeurs listées dans la fenêtre Variables comme arg0, arg1, arg2, etc mais au moins les valeurs sont visibles.Les variables déclarées localement ne peuvent pas être contrôlées

Cela se produit actuellement en relation avec les classes définies dans le noyau JDK. J'ai vérifié que le JRE installé et actuel est un JDK.

Quelqu'un peut-il faire la lumière sur ce comportement?

+1

Je faisais face au même problème. On dirait que 'ctrl + Shift + I' sur une variable locale sélectionnée montre la valeur. – blackSmith

+0

S'il n'y a pas d'informations de débogage sur les variables locales (voir les réponses ci-dessous et [Déterminer si le fichier .class a été compilé avec les informations de débogage?] (Https://stackoverflow.com/q/1508235/1078886)), ce raccourci n'aide pas soit, Eclipse affichera "_variable_ ne peut pas être résolu en une variable". –

Répondre

23

Apparemment, le answer est:

le rt.jar livré avec le JDK (où les classes de base Java en direct) ne sont pas compilé des informations complètes de débogage inclus dans les fichiers .class, de sorte que le débogueur n'a pas d'informations sur les variables locales.

Malheureusement, ce n'est pas quelque chose qu'Eclipse peut faire - tous les débogueurs auront le même problème avec les classes de base JDK.

Les release notes of Eclipse 3.4 états:

débogage manquant attributs
Le débogueur exige que les fichiers de classe compilés avec des attributs de débogage si elle est d'être en mesure d'afficher les numéros de ligne et les variables locales. Très souvent, les bibliothèques de classes (par exemple, "rt.jar") sont compilées sans attributs de débogage complets, et donc les variables locales et les arguments de méthode pour ces classes ne sont pas visibles dans le débogueur.

+2

Une très bonne chose serait si le JDK avait des informations de débogage actives dans son JRE privé! –

9

Il used to be que vous pouvez obtenir débogage rt.jar à partir de http: //download.java.net/jdk6/binaries/, mais pas plus.

Donc building your own rt.jar with -g semble être la seule option maintenant. C'est très simple: il suffit d'utiliser javac et jar de votre JDK.

  • mkdir \tmp; mkdir \tmp\out
  • Extrait src.zip dans le répertoire d'installation JDK tmp\src
  • cd src
  • find -name *.java > files.txt
  • javac -verbose -g -d \tmp\out -J-Xmx512m -cp "<jdk>\jre\lib\rt.jar";"<jdk>\lib\tools.jar" @files.txt
  • cd \tmp\out; jar cvf rt.jar *

Si vous utilisez Eclipse, vous n'avez pas besoin de -Xbootclasspath/p :, placez plutôt votre jar debug sur Bootstrap Entries avant JRE dans la configuration de lancement.

+3

J'ai essayé de compiler des sources à partir de 'src.zip' dans openjdk' jdk7u40-b43' en utilisant cette instruction, cependant javac ne voit pas certaines classes de rt.jar, le journal attaché à https://dl.dropboxusercontent.com /u/14767221/compile.log –

0

Vous pouvez trouver les binaires de débogage pour 1.6.0_25 à: http://download.java.net/jdk6/6u25/promoted/b03/index.html

Cela devrait vous permettre de débogage dans le code de la bibliothèque Java pour 1.6.

+1

Cette information n'est plus à jour. Les fichiers binaires de débogage ne sont plus disponibles à partir de cet emplacement. –

+0

Vous pouvez essayer ici: http://download.java.net/jdk6/6u25/promoted/b03/index.html. Et voici un lien vers un article de blog les décrivant, https://blogs.oracle.com/kto/entry/mustang_jdk_6_0_fastdebug. On dirait qu'ils ne font plus de builds fastdebug avec les versions plus récentes. Il y a une question ici, http://stackoverflow.com/questions/9029721/fastdebug-debug-builds-for-jdk-7, à la recherche de builds de débogage rapide Java 7, mais on dirait qu'il n'y en a pas. – Splaktar

0

J'ai essayé le lien (http://www.javaadvent.com/2014/12/recompiling-java-runtime-library-with.html), téléchargé le script ant et l'ai modifié.Modification: passé <compilerarg line="-g" /> dans javac. Il a généré rt.jar. Remplacé rt.jar de JRE. (N'oubliez pas de garder une sauvegarde).

Maintenant, je suis capable de regarder, inspecter les variables locales de n'importe quelle classe dans rt.jar pendant le débogage dans eclipse.

Questions connexes