Всем привет!
Хочу зафиксировать то, с чем пришлось недавно столкнуться и с чем столкнулись многие, кто уже работает с D365FO, но что для новичков может быть будет интересно. Речь идет об отладке в Visual Studio.
Отладка в D365FO производится в Visual Studio путем присоединения (attach) студии к процессу. В момент отладки другие пользователи работать с системой не могут (сайт висит белым экраном).
Соответственно, как мы добираемся до отладчика:
Предварительная настройка
- Необходимо убедиться, что в параметрах отладки установлен путь к отладочным символам в каталог, где лежат модели Вашего приложения (у меня это C:\AOSService\PackagesLocalDirectory)
- Необходимо убедиться, что указан путь к кэшу символов. Туда будут копироваться отладочные символы из источников. Для ускорения загрузки символов иногда указывают в роли папки кэша папку источник (ту же C:\AOSService\PackagesLocalDirectory), однако на мой взгляд не стоит этого делать, т.к. если Вам в дальнейшем захочется как-то скопировать эти папки с моделями или проанализировать каталог – то данные кэша будут мешаться.
Расстановка точек останова
Хорошо, когда есть возможность запустить код на исполнение сразу из студии (например, исполняемый класс (Runnable class)), но если надо провалиться в отладчик прямо из формы, то форму сначала нужно запустить в обозревателе и поставить точки останова в студии. Ищем нужную строку и жмем кнопку F9 или выбираем меню Debug-Toggle Breakpoint. В данном случае мы поставили точку останова на форме заказов на покупку (PurchTable)
Запуск обозревателя
Чтобы присоединиться к процессу обозревателя – обозреватель нужно сначала запустить. А иногда и перезапустить (или обновить), если он был запущен до того, как был выполнен билд. Открывать саму форму пока не надо, т.к. наша точка останова должна сработать на открытии формы, однако я укажу на скриншоте как из меню я вызываю форму
Присоединение
Идем в студию и выбираем пункт меню Debug-Attach to Process…
Вот теперь и начинаются различия.
- До версии 7.3 PU12 (а также в локальных виртуалках с демо-данными) необходимо было выбирать процесс w3wp.exe, для чего устанавливать флажок Show processes from all users и запускать предварительно студию с правами администратора
- После версии 7.3 PU12 в тех облачных средах, где отобрали права администратора добавили такую штуку, как IIS Express. Он визуально выглядит, как дополнительный значок в трее. При входе в студию (без повышенных прав администратора) останавливается служба World Wide Web Publishing Service (та самая w3wp.exe, к которой мы подключались до этого) и стартует IIS Express. Само собой, сайт, который хостится на этой службе падает, хотя и поднимается на IIS Express. В принципе это незаметно ровно то тех пор, пока со средой работает только один разработчик (как того и требует МС). Соответственно присоединяться мы будем уже не к w3wp.exe, а к iisexpress.exe и этот процесс будет висеть в процессах пользователя (флажок Show processes from all users устанавливать не потребуется)
Загрузка отладочных символов
После присоединения к процессу необходимо убедиться, что все отладочные символы загрузились (бывает, что они не все загрузились).
Такая картинка говорит о том, что отладочные символы для данной точки останова не загрузились и либо они дозагрузятся, когда мы откроем форму, либо их надо вручную дозагрузить. Я предпочитаю загружать все символы, т.к. они один раз загрузятся и больше потом кнопка Load All не будет тормозить (если конечно не будет удален кэш файлов). Бывает конечно что подтормаживает, но в целом по моему субъективному мнению процесс загрузки ускоряется. В интернете я находил способы частичной загрузки, но как-то они у меня нестабильно работали. Иногда бывает, что надо отсоединиться (меню Debug-Stop debugging) и снова подсоединиться.
После успешной загрузки символов точка останова "краснеет":
Прерывание
Открываем нашу форму заказов на покупку, обозреватель подтормаживает, мы смотрим в студию и ... вот она заветная желтая полосочка со списком переменных внизу.
Следует обратить внимание на разницу пунктов меню между Debug-Stop debugging (или DetachAll) и Debug-Terminate All.
В последнем случае прекращается исполнение кода, в то время как в первых вариантах студия всего лишь отцепляется от исполнения кода, а код продолжает исполняться (Stop debugging – остановка отладки, но это не остановка выполнения кода)
Тоже самое для процесса w3wp.exe
Еще маленькое дополнение к IIS Express. Если в силу ряда причин хочется отказаться от использования IIS Express и вернуться к старому доброму IIS (а также хочется, чтобы при открытии студии сайт не падал при переключении с IIS на IIS Express), то можно в файлике C:\AosService\PackagesLocalDirectory\Bin\DynamicsDevConfig.xml заменить значение параметра RuntimeHostType с IISExpress на IIS (само собой после этого нужен рестарт IIS). После этого для отладки нужно будет подключаться к процессу w3wp.exe
Забыл добавить. Версия, на которой все показывалось - 8.0 PU 15