Локально объявленные переменные не могут быть проверены - PullRequest
33 голосов
/ 07 ноября 2008

Иногда, когда я отлаживаю код в Eclipse, случается так, что, хотя я могу без труда просматривать и проверять переменные-члены класса, я не могу проверить значения переменных, объявленных локально в функциях. Кроме того, любые параметры текущей функции теряют свои «реальные» имена, и вместо этого каждый видит их значения, перечисленные в окне переменных, как arg0, arg1, arg2 и т. Д., Но, по крайней мере, значения видны.

Это происходит в настоящее время в отношении классов, определенных в ядре JDK. Я подтвердил, что установленный и текущий JRE является JDK.

Кто-нибудь может пролить свет на это поведение?

Ответы [ 4 ]

23 голосов
/ 07 ноября 2008

Видимо, ответ :

rt.jar, поставляемый с JDK (где живут основные классы Java), не скомпилирован с полной отладочной информацией, включенной в файлы .class, поэтому отладчик не имеет информации о локальной переменной.

К сожалению, это не то, с чем Eclipse может что-то сделать - все отладчики будут иметь одинаковую проблему с основными классами JDK.

Замечания к выпуску Eclipse 3.4 :

Отсутствуют атрибуты отладки
Отладчик требует, чтобы файлы классов были скомпилированы с атрибутами отладки, чтобы иметь возможность отображать номера строк и локальные переменные. Довольно часто библиотеки классов (например, «rt.jar») компилируются без полных атрибутов отладки, и поэтому локальные переменные и аргументы методов для этих классов не отображаются в отладчике.

9 голосов
/ 02 июня 2009

Раньше было , что вы можете получить отладочный rt.jar с http: //download.java.net/jdk6/binaries/, но не больше.

Так что создание собственного файла rt.jar с -g , похоже, является единственным вариантом. Это очень просто: просто используйте javac и jar из вашего JDK.

  • mkdir \tmp; mkdir \tmp\out
  • Извлечь src.zip в каталоге установки 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 *

Если вы используете Eclipse, вам не нужен -Xbootclasspath / p: вместо этого просто поместите свой файл отладки в записи Bootstrap перед JRE в конфигурации запуска.

0 голосов
/ 13 августа 2015

Я попробовал ссылку (http://www.javaadvent.com/2014/12/recompiling-java-runtime-library-with.html), скачал ant скрипт и изменил его. Модификация: передал <compilerarg line="-g" /> в javac. Он сгенерировал rt.jar. Заменил rt.jar в JRE. резервное копирование).

Теперь я могу наблюдать, проверять локальные переменные любого класса в rt.jar во время отладки в eclipse.

0 голосов
/ 12 апреля 2011

Вы можете найти отладочные файлы для 1.6.0_25 по адресу: http://download.java.net/jdk6/6u25/promoted/b03/index.html

Это должно позволить вам отладить код библиотеки Java для 1.6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...