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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2010, 23:05   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
kamalblogs: Adding a breakpoint through code in Dynamics Ax
Источник: http://kamalblogs.wordpress.com/2010...n-dynamics-ax/
==============

Every time I see a warning or error, the default place where i place my debugger was at “\Class\Info\add”. I was really not happy of going each time to the same class to place a breakpoint. This week i got rid of it finally

What I did was develop a small piece of code that will automatically add a breakpoint and called this piece of code from the internal development toolbar that we have. The internal development toolbar is something like Tabax.  You can also do the same and integrate with your own toolbar/ Tabax / Ax Assist.

X++:
static void  addBreakPoint(Args _args)
	{
	    container bpCon;
	    int       vers, i;
	    ;
	    //Get the breakpoint
	    bpcon = infolog.breakpoint();
	 
	   //Version just for reference not really needed
	    vers = conpeek(bpCon, i); i++;
	 
	    //set the breakpoint
	    bpCon += [@"\Classes\Info\add"];
	    bpCon += [1];
	    bpCon += [true];
	 
	    infolog.breakpoint(bpCon);
	}
Refer to the article below if you want to know or create toolbar for Ax. http://kamalblogs.wordpress.com/2007...namics-ax-4-0/


Источник: http://kamalblogs.wordpress.com/2010...n-dynamics-ax/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 06.07.2010, 23:45   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а зачем так?
и когда вызывать этот метод?

не лучше ли в методе infolog.error поставить оператор breakpoint?
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 01:48   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Как так? Когда вызывать какой метод?

Человек вместо того, чтобы ставить ручками брекпоинт в Info\add, предлагает ставить его по кнопке на, например, Табаксе. Отличное решение, мне нравится.

Не infolog.error, а Global\error имеется в виду? Можно и там ставить, если надо именно error отловить. Я предпочитаю инфо/адд, так как универсально для всех типов.
Старый 07.07.2010, 01:54   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Blog bot Посмотреть сообщение
a warning or error, the default place where i place my debugger was at “\Class\Info\add”. I was really not happy of going each time to the same class to place a breakpoint.
Ну... было четко указано warning или error.
Да, мне надо было написать warning или error.

Цитата:
Сообщение от oip Посмотреть сообщение
Человек вместо того, чтобы ставить ручками брекпоинт в Info\add, предлагает ставить его по кнопке на, например, Табаксе. Отличное решение, мне нравится.
Как ставить? Куда ставить? Как это "Ставить на кнопке"? Для чего такой изврат? Ничего не понимаю.
Можно по-русски написать?

Цитата:
Сообщение от oip Посмотреть сообщение
Не infolog.error, а Global\error имеется в виду? Можно и там ставить, если надо именно error отловить. Я предпочитаю инфо/адд, так как универсально для всех типов.
ага. опшипся. я тоже ставлю в info.add()
http://axapta.mazzy.ru/lib/exploreerror/
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 01:57   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Можно и по-русски.

Как обычно ставится брейкпоинт? Открывается АОТ, разворачивается ветка Классов, набирается info и несколько пробелов, разворачивается класс Info, открывается метод add, ставить брейкпоинт. Куча скучных действий.

Что предлагается? Добавить на Табакс кнопку, прописать в кликд вышеприведенный код. Когда надо поставить брейкпоинт, просто кликать на кнопку и все. Рядом, наверное, еще должен быть код, которые по повторному клику брейкпоинт снимать будет.
За это сообщение автора поблагодарили: mazzy (2).
Старый 07.07.2010, 02:00   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Blog bot Посмотреть сообщение
X++:
	    //Get the breakpoint
	    bpcon = infolog.breakpoint();
	 
...
	    //set the breakpoint
	    bpCon += [@"\Classes\Info\add"];
	    bpCon += [1];
	    bpCon += [true];
	 
	    infolog.breakpoint(bpCon);
}
Сильно подозреваю, что это какой-то недокументированный способ управления точками останова.

Но не понимаю почему это дается как шаманский рецепт в стиле "махни рукой, двинь ногой, подунь на огонь".

Что за шаманский контейнер передается в качестве аргумента и что за три параметра в этом контейнере?
Почему выбран такой странный способ в "три плюса", вместо одной конкатенации трех элементов в контейнере?

Можно ли в коде узнать список точек останова? Например, тот же метод breakpoint возвращает контейнер. Это точки останова? Если да, то почему в комментарии указано единственное число "get breakpoint"?

В какой версии это работает? в ax3.0 также есть такой метод.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 02:03   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Такой код уже был, кстати, тут. Почти два года назад.
[ANN] Tabax 0.1 -- панель задач для Axapta
Старый 07.07.2010, 02:06   #8  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Ничего недокументированного или шаманского нет.

Цитата:
Сообщение от mazzy Посмотреть сообщение
Что за шаманский контейнер передается в качестве аргумента и что за три параметра в этом контейнере?
Цитата:
breakpoint

(xinfo) public final container breakpoint([container _breakpoint])

this method will be used to get a list of all breakpoints and/or for set a list of breakpoints

_breakpoint
optional input container for setting the breakpoints

return
- container-content
the first element contains a '1' (version-number of the container-structure)
for each breakpoint 3 additional elements
- string:the treenode-path of the method containing the breakpoint
- integer:the row-number of the breakpoint
- boolean:is the breakpoint active ?

Example 1
take a look at the form SysBreakPoints [Shift F9]

Example 2
use the editor to set some breakpoints (doesn't matter where)
http://www.axaptapedia.com/Infolog_class#breakpoint
Старый 07.07.2010, 02:07   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
круть.
а что означают параметры?

в том коде вторым параметром добавлялось 11, а в этом 1. И что это значит?
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 02:11   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ага. понятно.
Спасибо тебе, добрый фей.

Тогда можно еще вопрос, пока cu5 компилируется?

Почему записано в три плюса, а не одной операцией конкатенации?
Почему так:
Цитата:
Сообщение от Blog bot Посмотреть сообщение
X++:
	    //set the breakpoint
	    bpCon += [@"\Classes\Info\add"];
	    bpCon += [1];
	    bpCon += [true];
а не так:
X++:
	    //set the breakpoint
	    bpCon += [@"\Classes\Info\add", 1, true];
?
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 02:13   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Я думаю, что просто автору так показалось нагляднее. Работать будет и так и так. Во всех версиях начиная как минимум с тройки. 2.5 никогда не видел, так что не знаю.
Старый 07.07.2010, 02:16   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А вот способ без программирования
[ANN] Tabax 0.1 -- панель задач для Axapta
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 02:20   #13  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Я тоже не сторонник программирования ради программирования, но в данном случае способ "без кода" ужасен. Лично у меня на девелоперских приложениях всегда десятки и десятки брейкпоинтов в ключевых местах кода на все случае жизни. Искать там каждый раз info\add гораздо дольше, чем кликнуть на кнопку. А тут разово за пару минут написал несколько строк кода, а потом "всю жизнь" пользуешься.
Старый 07.07.2010, 03:01   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oip Посмотреть сообщение
Лично у меня на девелоперских приложениях всегда десятки и десятки брейкпоинтов в ключевых местах кода на все случае жизни. Искать там каждый раз info\add гораздо дольше, чем кликнуть на кнопку. А тут разово за пару минут написал несколько строк кода, а потом "всю жизнь" пользуешься.
дык, может сделать наборы точек останова, а не включение/выключение на info.add?
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2010, 07:57   #15  
casperkamal is offline
casperkamal
Участник
 
10 / 22 (1) +++
Регистрация: 16.03.2007
Адрес: Hyderabad, India
Thumbs up
Цитата:
Strongly suspect that this is some undocumented way to manage the breakpoints.
The code is inspired from the following path "\Forms\SysBreakpoints\Methods\setBreakpoints"
Старый 07.07.2010, 09:59   #16  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
дык, может сделать наборы точек останова, а не включение/выключение на info.add?
Не понял идеи. Где сделать наборы? Без программирования?

Если честно, то лично я и Info\add очень редко пользуюсь. С помощью Infolog stack trace место возникновения ошибки без всяких брейкпоинтов находится за пару кликов.
Старый 07.07.2010, 10:35   #17  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
ага. понятно.
Почему так:
а не так:
X++:
	    //set the breakpoint
	    bpCon += [@"\Classes\Info\add", 1, true];
?
Как-то раз сталкивался с интересной ошибкой (в 3.0 и 4.0 повтояется в AX2009 сейчас проверить не могу). Контейнер инициализировался при помощи квадратных скобок и перечисленных через запятую значений (Стили для выгрузки в xml). Так вот, значений в перечислении может быть максимум 48. При добавлении 49-го в последовательность - "Переполнение во внутреннем стеке компилятора.".

X++:
con += [1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,29,40,41,42,43,44,45,46,47,48,49];
p.s. К данному топику отношения имеет конечно мало, просто решил поделиться
Старый 07.07.2010, 11:05   #18  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Да, было такое. Только 47 максимум, а не 48. В 2009 пофиксили.
Старый 18.08.2010, 11:28   #19  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Lightbulb моя метода
как-то намучившись ставить брекпоинты я добавил немного кода в начале метода Add

X++:
    if (_exception != Exception::Info)
    {
        if (WINAPI::getAsyncKeyState(0x10) > 1 && UserInfoHelp::userInUserGroup(urUserId(), 'Admin')) // #VK_SHIFT
            breakpoint;
    }
__________________
Axapta non erubescit
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
kamalblogs: Adding custom images for Treenode in Dynamics Ax Blog bot DAX Blogs 0 25.01.2010 17:05
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
emeadaxsupport: Debugging non-interactive X++ code in Dynamics AX 2009 when running on Windows Server 2008 Blog bot DAX Blogs 0 23.09.2009 13:05
CRM DE LA CREME! Configuring Microsoft Dynamics CRM 4.0 for Internet-facing deployment Blog bot Dynamics CRM: Blogs 0 18.08.2009 11:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:46.