28.04.2011, 18:11 | #1 |
Участник
|
Отладка кода в 2012
как известно, в 2012 к Х++ добавили IL-код
некоторые классы (например наследоваемые от SysOperationServiceController) могут исполняться в IL- коде возникает проблема с отладной работы таких классов. 1й вариант - отдладка IL кода через Visual studio - вроде в одной из демок про это говорилось, сходу не нашел, как это делать. но у меня возник вопрос: может можно как-нибудь настроить, чтобы класс исполнялся в старом добром X++ коде, ну и в целях отладки как-нибудь переключать режим исполнения. Кто-нибудь уже сталкивался, как дебажить такой код? |
|
28.04.2011, 19:02 | #2 |
Участник
|
Цитата:
Сообщение от lvan
как известно, в 2012 к Х++ добавили IL-код
некоторые классы (например наследоваемые от SysOperationServiceController) могут исполняться в IL- коде возникает проблема с отладной работы таких классов. 1й вариант - отдладка IL кода через Visual studio - вроде в одной из демок про это говорилось, сходу не нашел, как это делать. но у меня возник вопрос: может можно как-нибудь настроить, чтобы класс исполнялся в старом добром X++ коде, ну и в целях отладки как-нибудь переключать режим исполнения. Кто-нибудь уже сталкивался, как дебажить такой код? Steps to disable execution of the X++ code in IL: 1) ax32 –development 2) Turn off VCS 3) Close AX client 4) Run AX2012 client configuration utility as administrator 5) Create new configuration based on the original one. Call it SYS. 6) Change application object layer to SYS 7) Enter SYS license code 8) Apply settings 9) ax32 –development 10) In AOT navigate to the Service Groups node. Find AxClient service group 11) Delete FormLetterService from the group (that’s for PO\SO posting. Other services can be removed as well, if needed) 12) Right click on service group and press ‘Deploy Service Group’. That will take some time. 13) Close AX client 14) In AX client configuration utility change configuration to Original 15) Apply settings 16) ax32 –development 17) Turn on VCS |
|
29.04.2011, 01:03 | #3 |
Участник
|
Знакомые 17 пунктов
Чтоб дебагить студией нужно сделать ей Attach to process на Ax32serv.exe. После этого открыть студией нужный исходник (исходники лежат в Server\[AOS Name]\bin\XppIL\source) и ставить брейкпоинт. По поводу отключения выполнения в IL простых вариантов нет, к сожалению. Теоретически, вместо удаления сервиса из группы (что требует SYS лицензии) можно заменить сервис на фейковый (тоесть создать копию класса сервиса и использовать его в сервисе вместо оригинального). Должно сработать, но я не пробовал. |
|
29.04.2011, 09:06 | #4 |
Microsoft Dynamics
|
1. Вместо 11 шага, что бы не ставить SYS коды, я пользовался вариантом замены значения свойства service c FormletterService на InventItemService. Далее по списку.
2. Необходимо подправить место интересующего ухода в IL, так, что бы исполнение туда не уходило. Например, в методе \Classes\SysDictClass\invokeObjectMethod необходимо сделать правочку, что бы исполнение всегда проваливалось на веточку х++. Таких мест по приложению раскидано достаточно много. Можно поискать по ключевым словам, типа, XppILExecutePermission или runAs. Но, достаточно дебагером найти нужную точку перехода исполнения в IL и временно слегка подправить ее в нужную сторону. Например, тут \Data Dictionary\Tables\PurchTable\Methods\initFromVendTable заменить X++: xppILExecutePermission = new XppILExecutePermission(); xppILExecutePermission.assert(); purchTableContainer = runTableMethodIL(tableStr(PurchTable), tableStaticMethodStr(PurchTable, initFromVendTableIL), [buf2Con(this, true), buf2Con(_vendTable, true)]); CodeAccessPermission::revertAssert(); X++: purchTableContainer = PurchTable::initFromVendTableIL([buf2Con(this, true), buf2Con(_vendTable, true)]); Последний раз редактировалось AlexSD; 29.04.2011 в 09:17. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
30.04.2011, 09:16 | #5 |
Moderator
|
А я правильно понимаю, что во варианте с Attach To Process ax32serv.exe, при срабатывании breakpoint весь AOS суспендиться и все пользователи нервно курят до тех пор пока разработчик не нажмет F5?
|
|
|
За это сообщение автора поблагодарили: gl00mie (3). |
01.05.2011, 01:53 | #6 |
Участник
|
К сожалению, скорее да, чем нет. Суспендится CLR host на AOS. Тоесть выполнение любого менеджд кода любым пользователем засуспендится. Но всякие мелочи, как то открыть Table Browser, можно без проблем.
|
|
02.05.2011, 12:23 | #7 |
Microsoft Dynamics
|
ага... опыт показал, вторым клиентом на остановленный на брекпоинте АОС зайти не удается.
|
|
02.05.2011, 12:30 | #8 |
Moderator
|
Хочется надеяться, что в SP1 в системе реализуют отладочный режим и для конкретной сессии можно будет заказать использование выделенного CLR Host.
Вообще что-то мне кажется что со многими фичами может получиться как с переходом на RPC и Microsoft NLB (или это был Microsoft Cluster Server?) в версии 4.0. Реализовали, получили кучу негативного фидбека, попытались починить, потом не смогли и в версии sp1 выключили и вернули назад. Правда я слабо понимаю, как вы, например, сможете откатить новую главную книгу... |
|
02.05.2011, 12:42 | #9 |
Microsoft Dynamics
|
Выкрутимся как-нибудь, как обычно...
|
|
02.05.2011, 12:54 | #10 |
Moderator
|
|
|
Теги |
отладка, ax2012 |
|
|