29.07.2011, 16:21 | #1 |
Участник
|
Как лучше отлаживать код с временными таблицами, recordset'ами, set'ами, map'ами и прочими сложными структурами?
В связи с этими ветками
Просмотр [временных] таблиц в отладчике. ax2009 метод toString() в отладчике Использование Table Browser в момент отладки [ANN] Tabax 0.1 -- панель задач для Axapta хотелось бы начать обсуждение вопроса Как лучше отлаживать код с временными таблицами, recordset'ами, set'ами, map'ами и прочими сложными структурами? =============== лично я предпочитаю превращать в container и смотреть непосредственно в отладчике. для этого в классе appl я завел переменную DebugCon и метод для установки значения в эту переменную класса. Методика такая: 1. в коде вставляю вызов этого метода и ставлю точку останова 2. в отладчике в окне Watch (или в Variables) смотрю переменную класса appl.DebugCon 3. причем в окне Watch могу перечислить конкретные поля записей для отслеживания 4. а также могу изменить значения нужных мне переменных, если буду использовать этот контейнер в отладке дальше Но этот способ неудобен, если с кодом работает несколько человек одновременно. Да, конечно, можно завести нескольк переменных для каждого разработчика... но... А какова ваша методика отладки кода со сложными структурами? |
|
|
За это сообщение автора поблагодарили: trud (2). |
29.07.2011, 18:08 | #2 |
Участник
|
Если с кодом работает несколько человек то вставки только для себя можно обрамлять
if (curUserID() == "mazzy") { // блаблабла } if (curUserID() == "logger") { // бебебебе } друг другу мешать не будет. |
|
29.07.2011, 18:11 | #3 |
Участник
|
Перечитал внимательнее и не совсем понял какие проблемы создает это
Цитата:
Но этот способ неудобен, если с кодом работает несколько человек одновременно. Да, конечно, можно завести нескольк переменных для каждого разработчика... но..
Так что проблем быть не должно. |
|
29.07.2011, 18:55 | #4 |
Участник
|
Цитата:
4. а также могу изменить значения нужных мне переменных, если буду использовать этот контейнер в отладке дальше
Вы ведь работаете с упакованной копией значений полученной при вызове table2con(), а не со ссылкой. Последний раз редактировалось Logger; 29.07.2011 в 19:10. |
|
29.07.2011, 19:01 | #5 |
Участник
|
Вот еще пример класса, который принимает по ссылке произвольный объект и отображает нужную информацию в отладчике через toString()
Написано было изначально чтобы ловить изменение состояния объектов, у которых нельзя перекрыть toString() (какие то паразиты придумали делать его final ) Также не всегда бывает удобно использовать toString() для ядреных объектов, надо создавать наследника и с ним работать. Для xrecord - toString() можно перекрыть, но почему-то результат его вывода отладчик игнорирует. Поэтому возникла идея создать свой класс, который позволит отобразить в отладчике информацию для таких "неудобных" объектов. Думаю его можно и для обсуждаемых целей применять. Можно смотреть их значения посредством toString(), если их не очень много конечно. Если много - то в методе toString() вызываем упаковку интересующего нас объекта в контейнер-переменную и (!!!) ядро дергает из отладчика метод toString() при перерисовке окна, а мы заодно обновляем состояние внутренних переменных класса вытаскивая в контейнер содержимое объекта, таким образом получаем актуальную версию состояния наблюдаемого объекта. Т.е. для обновления контейнера не надо самим из отлаживаемого кода кода дергать map.pack() или как в примере маззи table2con() ядро это сделает за нас вызывая toString() Таким образом мы в любой момент времени видим актуальные значения без дополнительного кодирования.Вложение 7026 |
|
|
За это сообщение автора поблагодарили: mazzy (5), gl00mie (15), alex55 (3), Kabardian (3). |
29.07.2011, 19:08 | #6 |
Участник
|
Вот скрины как все это в отладке выглядит
|
|
Теги |
временная таблица, законченный пример, как правильно, классы коллекций, отладка, отладчик |
|
|