23.06.2011, 13:04 | #1 |
Участник
|
ax2009 метод toString() в отладчике
Вроде раньше работал совет axStart: Always add str tostring() method on your class for debug purpose.
который говорит, что можно переопределить метод toString и видеть эту строчку в окошке Watch отладчике. попробовал сделать так для SysRecordSortedList в ax2009 не получилось. Может быть, подскажете как можно кастомизировать окошко в отладчике для таких контейнерных объектов как RecordSortedlist, tmpTable, QueryBuildDatasource и т.п. Может быть, подскажете как можно кастомизировать отображение элементов контейнерного объекта в отладчике? |
|
|
За это сообщение автора поблагодарили: Hyper (1). |
23.06.2011, 13:36 | #2 |
Участник
|
На скриншоте видно что ваша переменная хоть и имеет тип SysRecordSortedList, но проинициализирована она значением типа RecordSortedList.
|
|
|
За это сообщение автора поблагодарили: mazzy (20). |
23.06.2011, 14:00 | #3 |
Участник
|
фух! барабашки нет.
спасибо! |
|
23.06.2011, 14:31 | #4 |
Участник
|
тогда делюсь фишкой, которая поможет просматривать в отладчике контейнерные объекты
отладчик умеет показывать содержимое переменной-контейнера, принадлежащей классу. однако, производительность катастрофически уменьшится, если мы будем постоянно обновлять контейнер при работе с объектом. поэтому: 1. объявляем переменную-контейнер внутри класса 2. обновляем эту переменную в методе toString 3. в отладчике получаем возможность просматривать содержимое контейнерного объекта (например, SysRecordSortedlist) 4. Profit X++: // This is a framework class. Customizing this class may cause problems with future upgrades to the software. class SysRecordSortedList extends RecordSortedList { tableId tableId; Container records; } X++: public str toString() { str ret; records = this.pack(); ret = strfmt("%1: %2", this.len(), super()); return ret; } по аналогии можно сделать классы обертки для map, list, set и и прочих контейнеров. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
23.06.2011, 14:51 | #5 |
Участник
|
Событие просмотра содержимого объекта в дебагере = метод toString объекта. Приколно.
Ещё можно попробовать в методе toSting() анализировать стек вызовов или какой-нибудь глобальный флаг, чтобы позволить методу toString так работать только в контексте дебагера. |
|
16.02.2012, 13:44 | #6 |
Участник
|
Некорректный код в toString() может привести к появлению "побочных эффектов" при отладке
С коллегой сегодня раскопали занятный глюк: при отладке кода разноски произвольным, казалось бы, образом откатывались транзакции. Поскольку в коде были вложенные транзакции, выглядело это еще более странно: всплывает отладчик, показывает ttsLevel 2, потом через пару шагов отладки - уже 0, потом в коде идет ttsbegin, ttsLevel увеличивается до 1, потом - опять 0. Разобраться помогла трассировка всего этого безобразия - в ходе ее разбора выяснилось, что транзакция откатывалась, когда отладчик вызывал метод toString(), чтобы показать описание объекта в окне Watch. Еще занятно то, что отладчик не может "остановиться", если исключение возникает в ходе того, как он "всплывает" и подготавливает данные для отображения в своем окне. Как результат, отловить такую ошибку в самом отладчике не получалось - никаких ошибок со стеками вызова не показывалось. Так что надо быть очень аккуратным при перекрытии метода toString() и реализации в нем какой-то нетривиальной логики
|
|
|
За это сообщение автора поблагодарили: lev (7), Stitch_MS (3). |
14.08.2015, 15:50 | #7 |
Участник
|
Никто не подскажет, есть такая возможность использовать toString для таблиц?
Например глядя на курсор EmplTable в отладчике, я желаю скорее видеть в описании Empld нежели RecId. Есть соображения по данному поводу? Dax 2009 |
|
14.08.2015, 17:44 | #8 |
Участник
|
Пробовал Не удалось.
Проще уж использовать toString объекта содержащего эту табличку. Либо завести еще одно несохраняемое поле в табличке и на postload методе инициализировать его нужным вам значением (конечно только если включен глобальный флажок отладки). |
|
14.09.2021, 13:25 | #9 |
Участник
|
Для табличных переменных игрища с toString лучше не делать.
toString(), гад, опасный. ax2012 |
|
Теги |
debugger, tostring, законченный пример, отладка, отладчик, полезное |
|
|