Отладка серверного кода
Glossary Item Box
Общие положения
В процессе разработки на платформе bpm'online может возникнуть необходимость выполнить отладку кода серверных схем исходного кода. Это могут быть, например, существующие базовые схемы, пользовательские конфигурационные классы, веб-сервисы или скрипты бизнес-процессов, написанные на языке C#. Выполнять отладку такого кода удобно с помощью интегрированных функций отладки среды разработки, например, Visual Studio. Отладчик Visual Studio позволяет приостанавливать выполнение методов, проверять значения переменных, изменять их и получать полное представление о том, что делает код.
Чтобы приступить к отладке приложения, необходимо выполнить ряд шагов:
- Выгрузить исходные коды конфигурации bpm'online в файлы локального каталога.
- Создать новый проект в Visual Studio, в котором будет выполняться отладка
- Добавить в проект Visual Studio выгруженных файлов с исходным кодом.
- Из проекта прикрепиться к рабочему процессу сервера IIS и начать процесс отладки.
ВАЖНО
Выполнять отладку описанным в статье способом можно только для приложений, развернутых on-site.
ВАЖНО
Отладку серверного кода описанным в данной статье методом можно только при выключенном режиме разработки в файловой системе (см. статью "Разработка в файловой системе").
ВАЖНО
Чтобы во время отладки была возможность узнать значения переменных, необходимо включить признак [Suppress JIT Optimization] (меню [Options], вкладки [Debugging] > [General]). Подробнее об оптимизированном и неоптимизированном коде во время отладки можно узнать из статьи "JIT Optimization and Debugging" документации Visual Studio.
1. Выгрузка исходных кодов конфигурации
Для этого необходимо выполнить настройку приложения.
В файле Web.config, расположенном в корневом каталоге приложения ("внешний" Web.config), для атрибута debug элемента compilation необходимо установить значение "true":
<compilation debug="true" targetFramework="4.5" />
После внесения изменений файл необходимо сохранить.
В файле Web.config, расположенном в каталоге Terrasoft.WebApp приложения ("внутренний" Web.config), необходимо указать значения для следующих элементов:
- Для настройки IncludeDebugInformation необходимо указать значение "true".
- Для настройки CompilerSourcesTempFolderPath в качестве значения нужно указать путь к каталогу, в который будут выгружаться файлы с исходными кодами.
- Для настройки ExtractAllCompilerSources указать значение "true", если необходимо выгружать все схемы при выполнении действия [Компилировать измененное] ([Compile modified items]) раздела [Конфигурация]. Чтобы выгружать только измененные схемы, необходимо установить значение "false" (значение по умолчанию).
<add key="IncludeDebugInformation" value="true" /> <add key="CompilerSourcesTempFolderPath" value="Путь_к_локальному_каталогу" /> <add key="ExtractAllCompilerSources" value="false" />
После внесения изменений файл необходимо сохранить.
Чтобы выгрузить файлы с исходными кодами серверных схем, необходимо в разделе [Конфигурация] приложения выполнить действие [Компилировать все] ([Compile all items]) (рис. 1).
Рис. 1. — Выполнение действия [Компилировать все]
Во время компиляции в папку, указанную в настройке CompilerSourcesTempFolderPath "внутреннего" Web.config, будут выгружены файлы с исходными кодами конфигурационных схем приложения, а также конфигурационные библиотеки, их модули и файлы с отладочной информацией (*.pdb). Исходные коды схем будут выгружены заново при каждой последующей компиляции приложения.
К СВЕДЕНИЮ
При компиляции будут выгружаться файлы исходных кодов схем того рабочего пространства, под которым была запущена компиляция. Файлы выгруженных исходных кодов конфигурационных схем именуются в определенном формате: [Название схемы в конфигурации].[Название пакета]_[Тип схемы].cs.
Например: Contact.Base_Entity.cs, ContractReport.Base_Report.cs.
2. Создание проекта Visual Studio для отладки
ВАЖНО
Для отладки исходного кода создавать проект Visual Studio не обязательно. Достаточно открыть в Visual Studio нужные файлы. Однако, если отладка выполняется часто, или необходимо работать с большим количеством файлов одновременно, то создание проекта сделает работу более удобной.
Чтобы создать проект для отладки приложения в Visual Studio, необходимо выполнить команду меню File > New > Project (рис. 2).
Рис. 2. — Создание нового проекта в Visual Studio
В окне свойств создаваемого проекта необходимо выбрать тип проекта [Class Library (.NET Framework)] (библиотека классов для классического приложения Windows), указать название и расположение проекта (рис. 3).
Рис. 3. — Свойства проекта Visual Studio
После создания проекта необходимо удалить из него лишний файл (по умолчанию в новый проект добавлен файл Class1.cs) и сохранить проект.
3. Добавление в проект Visual Studio выгруженных файлов с исходным кодом
Для этого в контекстном меню проекта в проводнике решения необходимо выбрать команду Add > Existing Item. В появившемся диалоговом окне необходимо перейти в каталог с выгруженными файлами с исходным кодом и выбрать все файлы (рис. 4).
Рис. 4. — Добавление файлов в проект
К СВЕДЕНИЮ
В проект Visual Studio можно добавлять только необходимые для отладки файлы. Но тогда переход между методами при отладке будет ограничен только методами классов, реализованных в добавленных в проект файлах.
После добавления файлов проект необходимо сохранить.
4. Прикрепление к рабочему процессу IIS для отладки
Чтобы начать отладку, необходимо прикрепиться к процессу сервера IIS, в котором запущено приложение. Для этого нужно в меню Visual Studio выбрать команду Debug > Attach to process (рис. 5).
Рис. 5. — Прикрепление к процессу
В открывшемся окне в списке процессов нужно выбрать рабочий процесс IIS, в котором запущен пул приложения bpm'online (рис. 6).
Рис. 6. — Прикрепление к рабочему процессу IIS
ВАЖНО
Название рабочего процесса может различаться в зависимости от конфигурации используемого сервера IIS. Для полнофункционального IIS Web Server процесс называется w3wp.exe, для IIS Express — iisexpress.exe.
По умолчанию рабочий процесс IIS запущен под учетной записью, имя которой совпадает с именем пула приложения. Чтобы отобразить процессы всех пользователей, а не только текущего, необходимо установить признак [Show processes from all users] (рис. 6).
После прикрепления к процессу IIS можно приступать к отладке. Для этого нужно открыть файл с нужным исходным кодом и установить точку останова (рис. 7).
Рис. 7. — Точка останова в конструкторе объекта [Контрагент]
Как только будет задействован метод, на котором была установлена точка останова, программа будет остановлена и можно будет просмотреть текущее состояние переменных (рис. 8).
Рис. 8. — Прерывание выполнения программы на точке останова
Возможные проблемы при отладке
После прикрепления к процессу IIS возможна ситуация, когда символ точки останова отображается в виде белого круга, ограниченного красной окружностью. Такая точка останова является неактивной и прерывания выполнения приложения на ней не произойдет. При наведении курсора на символ неактивной точки останова появится подсказка, уведомляющая о проблеме (рис. 9).
Рис. 9. — Неактивная точка останова. Не загружена символьная информация
Если подсказка содержит сообщение о том, что не была загружена символьная информация (рис. 8), то для решения проблемы необходимо:
- Завершить выполнение отладки (Debug > Stop Debugging).
- Закрыть файл с исходным кодом, для которого выполняется отладка.
- В разделе [Конфигурация] приложения выполнить действие [Компилировать все] ([Compile all items]) (рис. 1).
- Во время выполнения компиляции и перевыгрузки файлов с исходными кодами прикрепиться к процессу IIS заново
- После выполнения компиляции переоткрыть файл с исходным кодом, для которого выполняется отладка.
К СВЕДЕНИЮ
В некоторых случаях может помочь повторная компиляция без открепления и прикрепления к IIS.
После повторного открытия файла с исходным кодом может появиться сообщение о неединообразных символах конца строк (рис. 10).
Рис. 10. — Сообщение о неединообразных символах конца строк
Необходимо нажать кнопку [Нет] ([No])). Если согласиться с нормализацией символов (кнопка [Да] ([Yes])), то точка останова снова может стать неактивной. Причина проблемы отображается в подсказке — несоответствие версий файла (рис. 10). Также в подсказке отображены варианты решения проблемы.
Рис. 11. — Неактивная точка останова. Несоответствие версий файла