Подтвердить что ты не робот

Локально объявленные переменные не могут быть проверены

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

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

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

4b9b3361

Ответ 1

По-видимому, ответ :

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

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

примечания к выпуску Eclipse 3.4 гласит:

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

Ответ 2

Он был, который вы можете получить debug 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 в конфигурации запуска.

Ответ 3

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

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

Ответ 4

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

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