Question Les variables déclarées localement ne peuvent pas être inspectées


Parfois, lorsque je débogue le code dans Eclipse, il arrive que, bien que je puisse voir et inspecter les variables des membres de la classe sans aucune difficulté, 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 actuelle perdent leurs noms «réels» et à la place, leurs valeurs sont répertoriées dans la fenêtre Variables sous la forme arg0, arg1, arg2, etc. mais au moins les valeurs sont visibles.

Cela se produit actuellement par rapport aux classes définies dans le noyau JDK. J'ai vérifié que le JRE installé et actuel est un JDK.

Est-ce que quelqu'un est capable de faire la lumière sur ce comportement?


33
2017-11-07 08:26


origine


Réponses:


Apparemment, le répondre est:

Le fichier rt.jar fourni avec le kit JDK (où les classes Java principales sont actives) n'est pas compilé avec les informations de débogage complètes incluses dans les fichiers .class, de sorte que le débogueur ne possède pas d'informations sur les variables locales.

Malheureusement, Eclipse ne peut rien y faire: tous les débogueurs auront le même problème avec les classes de base JDK.

le notes de mise à jour d'Eclipse 3.4 États:

Attributs de débogage manquants
  Le débogueur nécessite que les fichiers de classe soient compilés avec des attributs de débogage pour pouvoir afficher les numéros de ligne et les variables locales. Assez souvent, les bibliothèques de classes (par exemple, "rt.jar") sont compilées sans attributs de débogage complets. Les variables locales et les arguments de méthode pour ces classes ne sont donc pas visibles dans le débogueur.


23
2017-11-07 08:40



Il l'habitude d'être que vous pouvez obtenir le debug rt.jar depuis http: //download.java.net/jdk6/binaries/, mais pas plus.

Alors construire votre propre rt.jar avec -g semble être la seule option maintenant. C'est très simple: utilisez simplement javac et jar de votre JDK.

  • mkdir \tmp; mkdir \tmp\out
  • Extrait src.zip dans le répertoire d'installation de 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 simplement votre fichier de débogage sur Bootstrap Entries avant JRE dans la configuration de lancement.


9
2018-06-02 17:55



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éboguer dans le code de la bibliothèque Java pour 1.6.


0
2018-04-12 14:23



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'a modifié. Modification: passé <compilerarg line="-g" /> en javac. Il a généré rt.jar. Rt.jar remplacé de JRE. (N'oubliez pas de garder une sauvegarde).

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


0
2017-08-13 05:39