AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.10.2011, 17:53   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Отладка сложных объектов. Как лучше?
ограничимся ax3.0, ax4.0, ax2009. (не обсуждаем ax2012)

итак, задача - разобраться в работе сложного объекта.
Сложный объект содержит в себе неатомарные переменные:
= таблицы (постоянные, временные)
= recordSet
= map, set, list
= список других объектов
(например, FormLetter, LedgerBondServer_RU, LedgerVoucher и его потомки, и т.п.)

на ваш взгляд, как лучше смотреть в отладчике состояние таких сложных объектов?
один из вариантов, как получить дамп состояния объекта? например, в виде xml? или в другом удобочитаемом виде?

================
Похожие темы:
Как лучше отлаживать код с временными таблицами, recordset'ами, set'ами, map'ами и прочими сложными структурами?
Просмотр [временных] таблиц в отладчике.
ax2009 метод toString() в отладчике
Использование Table Browser в момент отладки
__________________
полезное на axForum, github, vk, coub.
Старый 19.10.2011, 19:17   #2  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Может быть реализовать метод, который будет создавать файл, содержащий в имени текущие дату время, и писать в него текстовое представление всех элементов сложного объекта ( например в формате XML)

Что-то похожее было сделано тут (в ax3.0) :
\Classes\HeapLog

там текущее состояние памяти собиралось в дамп на диске, а потом разные дампы сравнивались.
Старый 24.10.2011, 13:31   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Можно перегрузить метод toString(), и в нем возвращать то, что вас интересует из этого объекта.
xml, имхо, не удобно читать.
обычный текст, разделенный переносами строк...
Старый 24.10.2011, 13:52   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Можно перегрузить метод toString(), и в нем возвращать то, что вас интересует из этого объекта.
xml, имхо, не удобно читать.
обычный текст, разделенный переносами строк...
про toString - ax2009 метод toString() в отладчике
но все-таки xml удобнее обычного текста. особенно, если данных много

просто надо пользоваться просмотрщиками, которые умеют xml-узлы свертывать.
например, вот так выглядит отладочная информация из LedgerBondServer_RU в Notepad++

(да, VisualStudio тоже так умеет, но оно загружается медленнее )
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 321
Размер:	99.9 Кб
ID:	7246   Нажмите на изображение для увеличения
Название: 2.PNG
Просмотров: 353
Размер:	107.8 Кб
ID:	7247  

__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: gl00mie (1).
Старый 24.10.2011, 13:55   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Можно перегрузить метод toString(), и в нем возвращать то, что вас интересует из этого объекта.
xml, имхо, не удобно читать.
обычный текст, разделенный переносами строк...
кроме того, у стандартных объектов уже есть метод xml(), который достаточно удобно использовать.
__________________
полезное на axForum, github, vk, coub.
Старый 24.10.2011, 14:49   #6  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Если бы отладчик Аксапты умел вызывать методы при написании их, например, в окне "Watch" (как это умеет 1С), тогда бы не пришлось заморачиваться с перегрузкой методов и написанием собственных...
__________________
Айрат Вильданов.
skype: vildanov.a
Старый 24.10.2011, 15:01   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да, я тоже пользуюсь Notepad++, но я про саму структуру xml - не очень удобно.
Хотя, конечно, дело вкуса. Мне мишура xml-ная глаза мозолит.
Старый 24.10.2011, 16:40   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AraraT® Посмотреть сообщение
Если бы отладчик Аксапты умел вызывать методы при написании их, например, в окне "Watch" (как это умеет 1С), тогда бы не пришлось заморачиваться с перегрузкой методов и написанием собственных...
нет, ни в коем случае.

тут либо не давать возможность вызывать методы,

либо четко различать методы с побочными действиями (first, next, checkAndInsertData, findOrCreate, getSomthing, calcSomthing) от методов без побочных действий (standartCurrency...)
(но тогда Хаксель выйдет с безумными монадами)

не, нафиг, нафиг.
__________________
полезное на axForum, github, vk, coub.
Старый 24.10.2011, 16:41   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Да, я тоже пользуюсь Notepad++, но я про саму структуру xml - не очень удобно.
Хотя, конечно, дело вкуса. Мне мишура xml-ная глаза мозолит.
а как свернуть блоки в plain-текст?
__________________
полезное на axForum, github, vk, coub.
Старый 24.10.2011, 16:46   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да обычным indentation даже. Пробелы глаз не режут
Старый 24.10.2011, 16:55   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Да обычным indentation даже. Пробелы глаз не режут
а в каком инструменте можно свернуть по indent'ам?
т.е. что-то вроде ini-файла получается... особенно для таблиц.

если честно, то по-моему фигово будут выглядеть сложные структуры с пробелами.
например, в том же гребанном-LedgerBondServer_RU
есть map со сложной структурой

Название: 1.PNG
Просмотров: 1873

Размер: 34.3 Кб

кроме того, не забывай, что структуры могут быть самозацикливающимися.
например, в том же оторвать-бы-яйца-разработчику-LedgerBondServer_RU и не-менее-гребанном-LedgerVoucher
__________________
полезное на axForum, github, vk, coub.
Старый 24.10.2011, 17:05   #12  
online
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Лично меня отладчик, который сейчас существует, вполне устраивает. Есть моменты, конечно, когда хочется добраться до реального значения,в режиме online, но низя, потому что писал его очень умный человек. Это когда в Map-e сидит container, в этом container-е сидит еще парочка container-ов, а там ссылки на recid промежуточной таблицы, которая хранит связь между тем что было и тем , что получилось
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
За это сообщение автора поблагодарили: mazzy (2).
Старый 25.10.2011, 09:01   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А я еще активно использую окно watch - например при отладке кода который разносит в ГК через LedgerVoucher я ставлю breakpoint на LedgerVouchherObject.addTrans при первом вызове роазворачиваю аргументы в окне locals для нужных мне полей и перетаскиваю в watch
Старый 25.10.2011, 09:04   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Pustik Посмотреть сообщение
Лично меня отладчик, который сейчас существует, вполне устраивает.
А мне очень многого не хватает, например, условных точек останова. Да и эта тема в целом свидетельствует о том, что не хватает визуализаторов.

Последний раз редактировалось belugin; 25.10.2011 в 09:08.
Старый 25.10.2011, 10:04   #15  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от belugin Посмотреть сообщение
А мне очень многого не хватает, например, условных точек останова.
гм... а чем не устраивает конструкция
X++:
if (...) breakpoint?
__________________
С уважением,
Вячеслав
Старый 25.10.2011, 10:27   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от pitersky Посмотреть сообщение
гм... а чем
это изменение кода. Для этого надо чекаутить и не забыть ее вынести при переносе. Также, напримерЮ условие может быть "при изменении этой переменной не важно где"
За это сообщение автора поблагодарили: mazzy (2).
Старый 25.10.2011, 12:53   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от AraraT® Посмотреть сообщение
Если бы отладчик Аксапты умел вызывать методы при написании их, например, в окне "Watch" (как это умеет 1С), тогда бы не пришлось заморачиваться с перегрузкой методов и написанием собственных...
X++:
class DEV_DebugHelper
{
     string expression;
     AnyType someObject;
     AnyType someObject()
     {
           return someObject;
     }
     string toString()
     {
          evalBuf(expression, this);
     }
}
В дебаггере меняете expression и смотрите результат в toString.

Приходится прицеплять к нужным объектам (присваивать someObject в коде)

Я так смотрел LedgerDimensionы в Ax2012, когда там хелперов для дебаггеров еще не написали. Может вы сможете развить идею
За это сообщение автора поблагодарили: Maxim Gorbunov (4), mazzy (5), Logger (5), AraraT® (2), S.Kuskov (5).
Старый 25.10.2011, 13:31   #18  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от belugin Посмотреть сообщение
В дебаггере меняете expression и смотрите результат в toString.

Приходится прицеплять к нужным объектам (присваивать someObject в коде)

Я так смотрел LedgerDimensionы в Ax2012, когда там хелперов для дебаггеров еще не написали. Может вы сможете развить идею
Хорошая идея.
Тоже хотел такое предложить, хотя сам на практике и не использовал.

Есть один неясный момент. Если в дебагере некорректно написать код, которые попробует выполнить ваш toString, то может получиться исключение. Транзакции при этом не откатываются ? Если да, то как с этим боролись ?
Старый 25.10.2011, 13:54   #19  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от belugin Посмотреть сообщение
Приходится прицеплять к нужным объектам (присваивать someObject в коде)
А вот интересно, возможно ли в X++ каким-то образом перебрать все объекты в памяти и получить к ним доступ ?
Похоже что нет.
Иначе можно было бы сделать полноценную надстройку над отладчиком, без необходимости присваивания someObject в коде.

P.S. когда ковырял Heapcheck, то находил там методы,
\System Documentation\Classes\HeapCheck\getUnfreedCursor
\System Documentation\Classes\HeapCheck\getUnfreedObject

Причем getUnfreedCursor() возвращает common
Не проверял, но возможно, что для курсоров возможен перебор всех объектов.

Хотя нам этого мало. Нужен перебор любых объектов и возможность сослаться на них в отладчике по какому-то идентификатору, например задавая его в строке expression
Старый 25.10.2011, 14:22   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Про exceptionы - не проверял
Теги
debugger, объект, отладка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012: Правила именования объектов sukhanchik DAX: Программирование 28 19.10.2013 17:24
Как сильно модифицировано ваше приложение Аксапты? (% обновленных партнерских объектов) mazzy DAX: Прочие вопросы 1 12.03.2009 17:41
Как сильно модифицировано ваше приложение Аксапты? (% новых партнерских объектов) mazzy DAX: Прочие вопросы 1 12.03.2009 17:41
Как сильно модифицировано ваше приложение Аксапты? (% обновленных объектов) mazzy DAX: Прочие вопросы 1 12.03.2009 17:41
Как сильно модифицировано ваше приложение Аксапты? (% новых объектов) mazzy DAX: Прочие вопросы 1 12.03.2009 17:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:56.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.