Храните идентификаторы объектов между двумя сеансами отладки - PullRequest
0 голосов
/ 22 марта 2012

Я отлаживаю Java-приложение с помощью отладчика eclipse.

Интересно, какие идентификаторы объектов показывает мне отладчик (см. Также Идентификатор объекта Java в jvm ).

Можно ли сделать идентичные идентификаторы между двумя сеансами отладки?Так что, когда я отлаживаю одно и то же приложение дважды (один за другим), одни и те же объекты имеют одинаковый идентификатор?Или можно установить точки останова следующим образом: Break в любом операторе, когда задействован объект с данным идентификатором?

Я имею в виду определение точки останова, которая не включает определенную строку кода.Я имею в виду точку останова, которая не зависит от строки кода.Точка останова, которая включает только идентификатор.Отладчик, имеющий под рукой инструмент, подобный этим идентификаторам: неужели он не может использовать его, чтобы предложить мне такую ​​функцию, как я предлагаю?

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Это невозможно.Идентификатор является внутренним для отладчика и генерируется случайным образом каждый раз, когда объект создается (или восстанавливается из сериализации и т. Д.).Более того, вам не следует пытаться злоупотреблять этим имуществом.

К счастью, в Java есть то, что, вероятно, подойдет вам: Object#hashCode.Это (полу) уникальный идентификатор для каждого уникального объекта (что касается Object#equals).Таким образом, его можно использовать для последовательной идентификации объекта в течение всего сеанса отладки, если данные одинаковы.

Eclipse может генерировать для вас hashCode() на основе всех переменных членов класса.Я бы посоветовал использовать его, так как он, вероятно, подойдет вашим потребностям и гарантирует, что хеш имеет все желаемые свойства.Он находится под правым кликом-> Source-> Generate hashCode () и равно ()

Что касается точки останова, просто создайте проверку if для правильного объекта и поместите точку останова внутри.

0 голосов
/ 22 марта 2012

Я не знаю, что конкретно представляют идентификаторы в Eclipse во время отладки (кроме того, что они уникально идентифицируют объект в этом сеансе отладки) - это может быть адрес памяти, дескрипторы (внутренние или внешние) и т. Д. Поскольку объекты обычно динамическисозданный, отладчик не может узнать, что один объект совпадает с другим в другом (прошлом) сеансе отладки.

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

Так что ответ - нет.

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