![]() |
#1 |
Участник
|
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); } ![]() Источник: http://kamalblogs.wordpress.com/2010...n-dynamics-ax/
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
![]() |
#2 |
Участник
|
а зачем так?
и когда вызывать этот метод? не лучше ли в методе infolog.error поставить оператор breakpoint? |
|
![]() |
#3 |
Axapta
|
Как так? Когда вызывать какой метод?
Человек вместо того, чтобы ставить ручками брекпоинт в Info\add, предлагает ставить его по кнопке на, например, Табаксе. Отличное решение, мне нравится. Не infolog.error, а Global\error имеется в виду? Можно и там ставить, если надо именно error отловить. Я предпочитаю инфо/адд, так как универсально для всех типов. |
|
![]() |
#4 |
Участник
|
Цитата:
Да, мне надо было написать warning или error. Цитата:
Можно по-русски написать? Цитата:
http://axapta.mazzy.ru/lib/exploreerror/ |
|
![]() |
#5 |
Axapta
|
Можно и по-русски.
![]() Как обычно ставится брейкпоинт? Открывается АОТ, разворачивается ветка Классов, набирается info и несколько пробелов, разворачивается класс Info, открывается метод add, ставить брейкпоинт. Куча скучных действий. Что предлагается? Добавить на Табакс кнопку, прописать в кликд вышеприведенный код. Когда надо поставить брейкпоинт, просто кликать на кнопку и все. Рядом, наверное, еще должен быть код, которые по повторному клику брейкпоинт снимать будет. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#6 |
Участник
|
Цитата:
Но не понимаю почему это дается как шаманский рецепт в стиле "махни рукой, двинь ногой, подунь на огонь". Что за шаманский контейнер передается в качестве аргумента и что за три параметра в этом контейнере? Почему выбран такой странный способ в "три плюса", вместо одной конкатенации трех элементов в контейнере? Можно ли в коде узнать список точек останова? Например, тот же метод breakpoint возвращает контейнер. Это точки останова? Если да, то почему в комментарии указано единственное число "get breakpoint"? В какой версии это работает? в ax3.0 также есть такой метод. |
|
![]() |
#7 |
Axapta
|
Такой код уже был, кстати, тут. Почти два года назад.
[ANN] Tabax 0.1 -- панель задач для Axapta |
|
![]() |
#8 |
Axapta
|
Ничего недокументированного или шаманского нет.
Цитата:
Цитата:
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) |
|
![]() |
#9 |
Участник
|
круть.
а что означают параметры? в том коде вторым параметром добавлялось 11, а в этом 1. И что это значит? |
|
![]() |
#10 |
Участник
|
ага. понятно.
Спасибо тебе, добрый фей. Тогда можно еще вопрос, пока cu5 компилируется? Почему записано в три плюса, а не одной операцией конкатенации? Почему так: Цитата:
X++: //set the breakpoint bpCon += [@"\Classes\Info\add", 1, true]; |
|
![]() |
#11 |
Axapta
|
Я думаю, что просто автору так показалось нагляднее. Работать будет и так и так. Во всех версиях начиная как минимум с тройки. 2.5 никогда не видел, так что не знаю.
![]() |
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Axapta
|
Я тоже не сторонник программирования ради программирования, но в данном случае способ "без кода" ужасен. Лично у меня на девелоперских приложениях всегда десятки и десятки брейкпоинтов в ключевых местах кода на все случае жизни. Искать там каждый раз info\add гораздо дольше, чем кликнуть на кнопку. А тут разово за пару минут написал несколько строк кода, а потом "всю жизнь" пользуешься.
![]() |
|
![]() |
#14 |
Участник
|
Цитата:
Сообщение от oip
![]() Лично у меня на девелоперских приложениях всегда десятки и десятки брейкпоинтов в ключевых местах кода на все случае жизни. Искать там каждый раз info\add гораздо дольше, чем кликнуть на кнопку. А тут разово за пару минут написал несколько строк кода, а потом "всю жизнь" пользуешься.
![]() |
|
![]() |
#15 |
Участник
|
![]() Цитата:
Strongly suspect that this is some undocumented way to manage the breakpoints.
![]() |
|
![]() |
#16 |
Axapta
|
Цитата:
Если честно, то лично я и Info\add очень редко пользуюсь. С помощью Infolog stack trace место возникновения ошибки без всяких брейкпоинтов находится за пару кликов. |
|
![]() |
#17 |
Участник
|
Цитата:
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]; |
|
![]() |
#18 |
Axapta
|
Да, было такое. Только 47 максимум, а не 48. В 2009 пофиксили.
|
|
![]() |
#19 |
Читатель
|
![]()
как-то намучившись ставить брекпоинты я добавил немного кода в начале метода Add
X++: if (_exception != Exception::Info) { if (WINAPI::getAsyncKeyState(0x10) > 1 && UserInfoHelp::userInUserGroup(urUserId(), 'Admin')) // #VK_SHIFT breakpoint; } |
|
|
|