как отлаживать объекты, находящиеся в куче? (eclipse-java) - PullRequest
0 голосов
/ 09 октября 2011

Я пытаюсь отладить классы, которые сидят на банке, и я не могу "видеть" объекты в опции отображения!

Кто-то сказал мне, что причина может заключаться в том, что объекты этого класса расположены в куче, а не в стеке.

Как я могу получить доступ к этим объектам в режиме отладки?

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Прежде всего, вы смешиваете некоторые понятия. Экземпляры объектов размещаются в так называемой памяти кучи, иначе говоря, в куче. Вызовы методов (в этих случаях) помещаются в область памяти стека, иначе говоря, в стек. Посмотрите на понятия «куча и стек» в жаргоне Java (и общего ООП), чтобы получить лучшее представление.

Во-вторых, когда вы добавляете точку останова, отлаживаете свою программу в Eclipse, и эта точка прерывания поражается выполнением, и отображается перспектива Eclipse Debug, есть несколько аспектов, о которых вы должны знать:

  • вы можете видеть глобальные (на уровне класса) поля текущего экземпляра и их значения (в правом верхнем углу вашего представления, на вкладке «переменные». Вы также можете видеть переменные + значения этих переменных локально к методу, который вы отлаживаете.

  • вы также можете видеть стек (в верхнем правом углу представления), то есть цепочку методов, помещенных в пространство стека, которые были вызваны до текущего метода, где остановился отладчик.

  • когда вы отлаживаете один из ваших собственных классов, вы ясно увидите, в какой точке кода вы находитесь (это большое окно в нижней части представления) - это потому, что исходный код этого класса доступно для Затмения. Однако, если вы продолжите отладку, вы можете наткнуться на вызов метода, который входит в экземпляр класса с исходным кодом, которого у вас нет (например, если ваш проект использует какой-то внешний jar, а текущий вызов метода использует какой-то метод некоторых экземпляр класса в этом внешнем банке). В этот момент Eclipse больше не может показывать вам «симпатичный» код в нижней части представления, он просто показывает некоторую путаницу (это скомпилированный байт-код), а также кнопку, которая позволяет вам присоединять (если доступно) источники внешняя банка, так что она может отображаться правильно. Если вы используете эту кнопку «прикрепить источники», вы можете просматривать и выбирать источники вашего банку. Для большинства (по крайней мере, хороших) библиотек jar вы также получаете отдельный jar с источниками, который вы должны загрузить и прикрепить к реальному jar-файлу, чтобы иметь возможность отладить его.

1 голос
/ 09 октября 2011

Вы не отлаживаете объекты или классы.Вы отлаживаете методы.Поместите точку останова в метод объекта, который вы хотите отладить, и вы сможете проверить содержимое этого объекта при вызове этого метода.

Если у вас есть объект A, содержащий коллекцию объектов B, установите точку останова в методе A, и вы сможете проверить его коллекцию B при вызове этого метода.

Но вы не можете просто начать отладку и увидеть все объекты в куче.Может быть очень сложно определить, кого вы ищете.

0 голосов
/ 25 октября 2011

Для классов, для которых у вас нет кода, вы можете использовать http://sourceforge.net/projects/jadclipse/, который декомпилирует файл класса и покажет вам код.Вы можете отлаживать, видеть значения переменных, поток управления, но не можете вносить какие-либо изменения.

Еще один вариант - прикрепить исходный архив, к банке, которую нужно отладить.Но и в этом случае вы не можете вносить изменения.

В большинстве случаев вы не будете вносить изменения в сторонние банки.В случае, если действительно необходимо получить исходный код, если он доступен.

Еще один способ - после декомпиляции класса скопируйте содержимое в файл Java по тому же пути в вашем проекте.Теперь этот класс будет выбран из кода ur вместо jar и , вы также можете вносить изменения

...