Показать сообщение отдельно
Старый 29.07.2011, 19:01   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,984 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Вот еще пример класса, который принимает по ссылке произвольный объект и отображает нужную информацию в отладчике через toString()

Написано было изначально чтобы ловить изменение состояния объектов, у которых нельзя перекрыть toString() (какие то паразиты придумали делать его final )
Также не всегда бывает удобно использовать toString() для ядреных объектов, надо создавать наследника и с ним работать. Для xrecord - toString() можно перекрыть, но почему-то результат его вывода отладчик игнорирует.

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

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

Если много - то в методе toString() вызываем упаковку интересующего нас объекта в контейнер-переменную и
(!!!)
ядро дергает из отладчика метод toString() при перерисовке окна, а мы заодно обновляем состояние внутренних переменных класса
вытаскивая в контейнер содержимое объекта, таким образом
получаем актуальную версию состояния наблюдаемого объекта.
Т.е. для обновления контейнера не надо самим из отлаживаемого кода кода дергать map.pack() или как в примере маззи table2con()
ядро это сделает за нас вызывая toString()

Таким образом мы в любой момент времени видим актуальные значения без дополнительного кодирования.Вложение 7026
Вложения
Тип файла: xpo SharedProject_GRD_DebuggerViewObjectProperties.xpo (6.4 Кб, 600 просмотров)
За это сообщение автора поблагодарили: mazzy (5), gl00mie (15), alex55 (3), Kabardian (3).