19.10.2011, 17:53 | #1 |
Участник
|
Отладка сложных объектов. Как лучше?
ограничимся ax3.0, ax4.0, ax2009. (не обсуждаем ax2012)
итак, задача - разобраться в работе сложного объекта. Сложный объект содержит в себе неатомарные переменные: = таблицы (постоянные, временные) = recordSet = map, set, list = список других объектов (например, FormLetter, LedgerBondServer_RU, LedgerVoucher и его потомки, и т.п.) на ваш взгляд, как лучше смотреть в отладчике состояние таких сложных объектов? один из вариантов, как получить дамп состояния объекта? например, в виде xml? или в другом удобочитаемом виде? ================ Похожие темы: Как лучше отлаживать код с временными таблицами, recordset'ами, set'ами, map'ами и прочими сложными структурами? Просмотр [временных] таблиц в отладчике. ax2009 метод toString() в отладчике Использование Table Browser в момент отладки |
|
19.10.2011, 19:17 | #2 |
Участник
|
Может быть реализовать метод, который будет создавать файл, содержащий в имени текущие дату время, и писать в него текстовое представление всех элементов сложного объекта ( например в формате XML)
Что-то похожее было сделано тут (в ax3.0) : \Classes\HeapLog там текущее состояние памяти собиралось в дамп на диске, а потом разные дампы сравнивались. |
|
24.10.2011, 13:31 | #3 |
Участник
|
Можно перегрузить метод toString(), и в нем возвращать то, что вас интересует из этого объекта.
xml, имхо, не удобно читать. обычный текст, разделенный переносами строк... |
|
24.10.2011, 13:52 | #4 |
Участник
|
Цитата:
но все-таки xml удобнее обычного текста. особенно, если данных много просто надо пользоваться просмотрщиками, которые умеют xml-узлы свертывать. например, вот так выглядит отладочная информация из LedgerBondServer_RU в Notepad++ (да, VisualStudio тоже так умеет, но оно загружается медленнее ) |
|
|
За это сообщение автора поблагодарили: gl00mie (1). |
24.10.2011, 13:55 | #5 |
Участник
|
кроме того, у стандартных объектов уже есть метод xml(), который достаточно удобно использовать.
|
|
24.10.2011, 14:49 | #6 |
Участник
|
Если бы отладчик Аксапты умел вызывать методы при написании их, например, в окне "Watch" (как это умеет 1С), тогда бы не пришлось заморачиваться с перегрузкой методов и написанием собственных...
__________________
Айрат Вильданов. skype: vildanov.a |
|
24.10.2011, 15:01 | #7 |
Участник
|
Да, я тоже пользуюсь Notepad++, но я про саму структуру xml - не очень удобно.
Хотя, конечно, дело вкуса. Мне мишура xml-ная глаза мозолит. |
|
24.10.2011, 16:40 | #8 |
Участник
|
Цитата:
тут либо не давать возможность вызывать методы, либо четко различать методы с побочными действиями (first, next, checkAndInsertData, findOrCreate, getSomthing, calcSomthing) от методов без побочных действий (standartCurrency...) (но тогда Хаксель выйдет с безумными монадами) не, нафиг, нафиг. |
|
24.10.2011, 16:41 | #9 |
Участник
|
а как свернуть блоки в plain-текст?
|
|
24.10.2011, 16:46 | #10 |
Участник
|
Да обычным indentation даже. Пробелы глаз не режут
|
|
24.10.2011, 16:55 | #11 |
Участник
|
а в каком инструменте можно свернуть по indent'ам?
т.е. что-то вроде ini-файла получается... особенно для таблиц. если честно, то по-моему фигово будут выглядеть сложные структуры с пробелами. например, в том же гребанном-LedgerBondServer_RU есть map со сложной структурой кроме того, не забывай, что структуры могут быть самозацикливающимися. например, в том же оторвать-бы-яйца-разработчику-LedgerBondServer_RU и не-менее-гребанном-LedgerVoucher |
|
24.10.2011, 17:05 | #12 |
Участник
|
Лично меня отладчик, который сейчас существует, вполне устраивает. Есть моменты, конечно, когда хочется добраться до реального значения,в режиме online, но низя, потому что писал его очень умный человек. Это когда в Map-e сидит container, в этом container-е сидит еще парочка container-ов, а там ссылки на recid промежуточной таблицы, которая хранит связь между тем что было и тем , что получилось
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
25.10.2011, 09:01 | #13 |
Участник
|
А я еще активно использую окно watch - например при отладке кода который разносит в ГК через LedgerVoucher я ставлю breakpoint на LedgerVouchherObject.addTrans при первом вызове роазворачиваю аргументы в окне locals для нужных мне полей и перетаскиваю в watch
|
|
25.10.2011, 09:04 | #14 |
Участник
|
А мне очень многого не хватает, например, условных точек останова. Да и эта тема в целом свидетельствует о том, что не хватает визуализаторов.
Последний раз редактировалось belugin; 25.10.2011 в 09:08. |
|
25.10.2011, 10:04 | #15 |
северный Будда
|
гм... а чем не устраивает конструкция
X++: if (...) breakpoint?
__________________
С уважением, Вячеслав |
|
25.10.2011, 10:27 | #16 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
25.10.2011, 12:53 | #17 |
Участник
|
Цитата:
X++: class DEV_DebugHelper { string expression; AnyType someObject; AnyType someObject() { return someObject; } string toString() { evalBuf(expression, this); } } Приходится прицеплять к нужным объектам (присваивать someObject в коде) Я так смотрел LedgerDimensionы в Ax2012, когда там хелперов для дебаггеров еще не написали. Может вы сможете развить идею |
|
|
За это сообщение автора поблагодарили: Maxim Gorbunov (4), mazzy (5), Logger (5), AraraT® (2), S.Kuskov (5). |
25.10.2011, 13:31 | #18 |
Участник
|
Цитата:
Тоже хотел такое предложить, хотя сам на практике и не использовал. Есть один неясный момент. Если в дебагере некорректно написать код, которые попробует выполнить ваш toString, то может получиться исключение. Транзакции при этом не откатываются ? Если да, то как с этим боролись ? |
|
25.10.2011, 13:54 | #19 |
Участник
|
Цитата:
Похоже что нет. Иначе можно было бы сделать полноценную надстройку над отладчиком, без необходимости присваивания someObject в коде. P.S. когда ковырял Heapcheck, то находил там методы, \System Documentation\Classes\HeapCheck\getUnfreedCursor \System Documentation\Classes\HeapCheck\getUnfreedObject Причем getUnfreedCursor() возвращает common Не проверял, но возможно, что для курсоров возможен перебор всех объектов. Хотя нам этого мало. Нужен перебор любых объектов и возможность сослаться на них в отладчике по какому-то идентификатору, например задавая его в строке expression |
|
25.10.2011, 14:22 | #20 |
Участник
|
Про exceptionы - не проверял
|
|
Теги |
debugger, объект, отладка |
|
|