О чем эта статья
Это очередная статья из цикла «Первые шаги в разработке на 1С». Она продолжает тему предыдущей статьи, посвященной особенностям работы в конфигураторе.
В этом материале мы рассмотрим специальный инструмент, облегчающий разработку и отладку программного кода на платформе «1С:Предприятие», который получил название Отладчик. Изучив статью, вы узнаете:
- Для чего нужен отладчик и как им пользоваться?
- Что такое точки останова, как и зачем их ставить?
- Как пошагово выполнять программный код и зачем это нужно?
- Где смотреть значения своих переменных, а также вычислять значения выражений?
- Для чего нужен стек вызова и как его посмотреть?
- Как остановить выполнение программного кода по ошибке?
Применимость
В статье рассматривается платформа 1C версии 8.3.4.365. Текущая актуальная версия платформы содержит более богатые механизмы отладки, однако это не делает представленную информацию устаревшей, т.к. все описанные в статье механизмы и приемы отладки остались прежними.
Использование отладчика в системе «1С:Предприятие 8»
Система “1С:Предприятие 8” содержит встроенный отладчик программного кода.
Отладчик – это специальный инструмент Конфигуратора, который позволяет анализировать работу программного кода. В приведенной статье рассматриваются некоторые возможности отладчика, которые чаще всего используются разработчиками.
Для анализа программного кода с помощью отладчика используется специальный инструмент, который называется точка останова.
Точка останова – место остановки работы системы в программном коде, отмеченное специальным маркером (Рис. 1).
Рис. 1. Точка останова
При срабатывании точки останова становится возможным пошаговое выполнение программного кода и анализ значений переменных.
Установка точек останова
Установка точки останова на определенной строке программного кода осуществляется двойным щелчком левой кнопки мыши в левой области программного модуля, которая выделена серым цветом.
Также возможна установка точки останова командой Точка останова на панели инструментов конфигуратора или кнопкой F9. Снятие существующей точки останова производится аналогичным образом.
Для установки точки останова на конец процедуры или функции необходимо устанавливать точку останова на ключевом слове КонецПроцедуры или КонецФункции.
Точку останова можно временно отключить, не удаляя ее из программного кода. Для выключения точки останова выполнить команду Отключить точку останова на панели инструментов или нажать сочетание клавиш Ctrl+Shift+F9.
Для просмотра всех точек останова нужно выполнить команду главного меню Отладка – Список точек останова или нажать сочетание клавиш Alt+F9. В открывшей форме Точки останова можно временно отключать или удалять точки останова (Рис. 2).
Рис. 2. Список точек останова
Для удаления всех точек останова нужно выполнить команду главного меню конфигуратора Отладка – Убрать все точки останова.
Точка останова с условием
Точка останова с условием необходима для остановки выполнения программного кода при срабатывании определенного условия.
Для установки точки останова с условием нужно выполнить команду главного меню конфигуратора Отладка – Точка остановка с условием. Откроется форма Условие останова. В поле ввода нужно ввести необходимое условие (например, значение какой-либо переменной в программном коде) и нажать кнопку ОК (Рис. 3).
После запуска системы в режиме отладки точка останова сработает, когда будет выполнено условие останова. Убедиться в этом можно с помощью формы Табло (Рис. 3). Работа с формой Табло будет рассмотрена ниже.
Рис. 3. Установка точки останова с условием и результат ее обработки
Для того чтобы начать отлаживать программный код необходимо установить точки останова и запустить приложение в режиме отладки. Для запуска отладки нужно выполнить команду главного меню конфигуратора Отладка – Начать отладку (F5).
После запуска приложения в отладочном режиме необходимо обеспечить срабатывание точки останова. Здесь возможны разные сценарии. Например, точка останова установлена в модуле формы документа в стандартном обработчике события ПриОткрытии (). В этом случае точка останова сработает в момент открытия формы любого документа в пользовательском режиме.
Точка останова может быть установлена в произвольной процедуре или функции, которую создал разработчик. В этом случае точка останова сработает после вызова этой процедуры или функции из определенной строки программного кода.
После того как сработала точка останова система останавливает выполнение программного кода и становится возможным использование различных функций отладчика, таких как: пошаговое выполнение программного кода, использование формы Табло и т.д.
Пошаговое выполнение программного кода
Для пошагового выполнения программного кода используются команды, которые доступны в главном меню конфигуратора в меню Отладка. Для этих команд удобно использовать горячие клавиши.
Шагнуть в (F11). Если следующий оператор программного кода выполняет вызов проце-дуры или функции, то осуществляется ее пошаговое выполнение, иначе – выполняется следующий оператор.
Шагнуть через (F10). Если следующий оператор программного кода выполняет вызов процедуры или функции, то осуществляется ее выполнение полностью без входа внутрь. Затем выполняется следующий оператор.
Идти до курсора (Shift+F10). Осуществляется выполнение операторов от текущей выпол-няемой строки до строки программного кода, где расположен курсор.
Использование форм Табло и Выражение
Для просмотра значений переменных и вычисления значений выражений во время оста-новки программного кода предназначены формы Табло и Выражение.
Форма Табло вызывается командой главного меню конфигуратора Отладка – Табло или сочетанием клавиш Ctrl+Alt+W. В табло можно записать значения каких-либо переменных и анализировать, как они изменяются в процессе выполнения программного кода.
У табло доступны четыре закладки. По умолчанию закладки выключены. Для включения закладок в форме Табло нужно вызвать контекстное меню и установить флаг Закладки (Рис. 4).
Рис. 4. Форма “Табло” с включенными закладками
Для вычисления значений выражений в момент остановки программного кода используется форма Выражение. Для открытия этой формы используется команда главного меню конфигуратора Отладка – Вычислить выражение или сочетание клавиш Shift+F9 (Рис. 5).
Рис. 5. Форма “Выражение”
В поле Выражение вводится выражение на встроенном языке. Значение выражения можно получить нажав кнопку Рассчитать. В поле Результат выводится значение выражения. Выражение можно отобразить в табло нажав кнопку Включить в табло.
Для просмотра значений коллекции (например, таблицы значений, списка значений, массива) можно использовать команду Показать значение в отдельном окне или клавишу F2.
Просмотр стека вызовов
Стек вызовов – форма, которая позволяет отслеживать взаимные вызовы процедур и функций в процессе исполнения программного кода. Стек вызовов отображается командой главного меню конфигуратора Отладка – Стек вызовов или сочетанием клавиш Ctrl+Alt+C. Из формы Стек вызовов можно перейти к соответствующей процедуре или функции (Рис. 6).
Рис. 6. Стек вызовов
Остановка программного кода по ошибке
В процессе выполнения программного кода могут возникать ошибки, приводящие к аварийной остановке приложения. Для настройки возможности остановки программного кода на строке, в которой возникла ошибка, используется форма Остановка по ошибке.
Для открытия формы нужно выполнить команду главного меню конфигуратора Отладка – Остановка по ошибке.
В форме нужно установить флаг Остановка по ошибке и запустить приложение в режиме отладки. Выполнение программного кода будет остановлено на строке, в которой возникла ошибка (Рис. 7).
Используя возможности отладчика, описанные в этой статье, разработчик может анализировать как собственный программный код, так и программный код типовых решений фирмы “1С”.
Как показывает практика без отладчика поиск ошибок в программном кода занимает длительное время. Поэтому освоению отладчика нужно уделить особое внимание.
Как было упомянуто выше, механизм отладки был существенным образом расширен в последующих редакциях платформы. Для тех, кто хочет ознакомиться с подробным описанием этих нововведений, рекомендуем прочитать соответствующий материал в блоге самих разработчиков платформы.
В заключение отметим, что конфигуратор – это полноценная и до недавнего времени единственная среда разработки приложений на платформе «1С:Предприятие 8». Он обладает очень богатым функционалом, призванным помочь разработчику в решении его ежедневных задач.
В редакции 8.3 в конфигураторе добавилось много мелких полезностей для разработчика. И в следующей статье мы с ними обязательно познакомимся.
“1С:Программист – Быстрый старт в профессию!”.
Помимо обычной точки останова в 1С есть еще один вид точек останова с условием. Графически такая точка отображается синим цветом. Такая точка останова очень полезна когда нужно отловить какую-либо определенную итерацию при обходе в цикле. Отладка включится в тот момент, когда выполнится определенное условие
Добрый день.
А как пользоваться отладкой, если процедуры исполняются возможность БСП длительные операции. У меня что-то не получается даже в файловом варианте.
Заранее спасибо.
При использовании БСП длительные операции выполняются в фоновых заданиях. Поэтому и отлаживать нужно программный код, работающий в фоновом задании. Для этого в меню Отладка – Подключение нажмите кнопку Автоматическое подключение. В открывшейся форме отметьте галочкой пункт Фоновые задания. Далее можно установить точку останова в требуемой строке программного кода, выполняемого в фоновом задании, пользоваться инструментами отладки.
Спасибо.
К авторам статьи. Хорошо бы это включить в статью. Ведь сейчас БСП и фоновые задания активно используются.
Здравствуйте! Почему иногда происходит что при отладке (точнее при переходе на точку останова в конфигураторе) конфигуратор на несколько секунд подвисает (может висеть 10-15 секунд) потом отпускает и идет нормально. База на 1с 8.1 УПП, установлен отладка на сервере
Добрый день!
Наблюдал аналогичную проблему у одного клиента на платформе 8.1. Причем после перезапуска сервера 1С она какое-то время не беспокоила, а в течение рабочего дня внезапно появлялась. Решилась проблема как-то сама собой после перехода на 8.2. Самое печальное, что в 8.2 существуют до сих пор и другие проблемы, связанные с отладкой (сбиваются строки в отладчике, в процессе отладки после многочисленных запусков-завершений отладка перестает работать, не реагирует на F5 и соответствующий пункт меню). По сообщениям коллег такие ошибки иногда воспроизводятся и по сей день. И они находятся где-то в недрах платформы. Поэтому могу порекомендовать только перезапускать каждую ночь сервер 1С (если помогает), подумать над сменой платформы (понимаю, что в случае с УПП это не элементарное действие) либо обращаться к разработчикам, они же в свою очередь будут запрашивать дополнительные сведения о проблеме – технологический журнал для процессов конфигуратора, сервера (процесс rphost), запускаемого клиента и т.п.
1с Сервер перезапускается каждую ночь (Сам сервер физически). База SQL на отдельном сервере.
Самое интересное, что через Citrix такой проблемы нет. Отладчик там работает без тормозов. Citrix крутится на отдельном сервере.
В таком случае следует подробно расписать разработчикам возникающую проблему на v8@1c.ru с описанием проявлений и технического окружения.
Хотелось бы про отладку подключений к веб-сервисами (через Apache).
Ни разу не получалось “их поймать” в отладке.
Ну это не тривиальная задача, по старинке, но в случае скуля, служба должна быть запущенна в режиме дебага. В 8.3.4 вроде сделали так, что можно по человечески все настроить, но я забыл как :)
Управлять точками останова можно еще через контекстное меню в модуле.
Если уже поднимать вопрос про клиент сервер, то можно и копнуть в отладку веб сервисов и разных веббраузеров.
Ну и можно сказать о том, как можно подключить отладку к конкретному пользователю.
Здравствуйте.
Хорошая статья, как впрочем, все что видел на ваших сайтах, но очень хотелось бы увидеть разбор настройки для отладки внешнего соединения. В том числе и для клиент-серверного варианта.
Наверное, не помешало бы отдельную статью про отладку в клиент-серверном варианте. Точнее, отдельное дополнение к этой. Ведь это только в файловом варианте можно серверные процедуры отладить. В клиент-серверном варианте такой фокус не пройдет и будет человек гадать, почему же не попадает в серверную процедуру. :)
В клиент-серверном варианте можно отладку процедур производить! Надо только изменить в реестре ключи запуска 1С сервера и прописать в ключик реестра ImagePath дополнительно ключик -debug
Получиться примерно так:
“C:\Program Files\1cv82\8.2.17.143\bin\ragent.exe” -srvc -debug -agent -regport 1541 -port 1540 -range 1560:1591 -d “C:\Program Files\1cv82\srvinfo”
Я в курсе про это. Но статья-то не только для меня создавалась :)
Серверные процедуры возможно отлаживать не только в файловом варианте, но и в клиент-серверном. Это возможно когда сервер 1С запущен в режиме отладки ( с ключом -debug). При этом возможно падение производительности сервера, поэтому рабочие сервера не рекомендуют в таком режиме использовать.
Валентина, спасибо :)
Сорри, немного не так написал текст. Я имел ввиду, что отладка серверных процедур возможна в файловом варианте по умолчанию. Но в статье нет упоминания, как это включить для клиент-серверного варианта.
Статьи – вещь полезная. В набор возможного сборника неплохо бы добавить тематический рубрикатор для удобного поиска. Кроме того было бы неплохо собрать базу данных по наиболее частым вопросам. Есть похожие системы на сайтах help1C, mista. Может быть, ваш вариант будет тоже востребован.
Добрый вечер!
Хорошая статья, полезная. Как раз недавно смотрел видео на эту тему.
А под рукой иметь материал, тоже удобно.
Поддерживаю идею на счет рубрики “Полезняшки 8.3″
Спасибо!
Добрый день! Мне тоже очень понравилось. Спасибо. Хорошо бы для программистов делать рубрику “Полезняшки 8.3” или что-то в этом духе.
Добрый день! Статьи – это тоже хорошее начинание. Спасибо. Наверное, здесь скоро будет много полезняшек.
Добрый день, Артем!
Спасибо! Будем стараться! :)
Добрый день! Пока только качаю. Евгений, Вы когда-нибудь спите? Огромное спасибо за вашу работу!
Добрый день, Владимир!
Спасибо! :)
Рекомендую не только качать, но и изучать.
От скаченных материалов Ваши навыки и опыт не увеличатся..