Разработка справочной системы, отладка
2.3. Методы отладки
В процессе разработки прикладных решений нередко возникает необходимость "заглянуть" внутрь выполняющейся программы. Такое обычно случается, когда в программе возникают ошибки. Ошибки могут быть самыми разными. От полного отказа программы на каком-то этапе, до странных результатов, которые выдает вроде бы работающий код.
Искать ошибки можно с помощью отладчика. При отладке можно пользоваться множеством полезных инструментов.
Для того чтобы получить возможность пользоваться инструментами отладки, нужно запустить конфигурацию в режиме отладки. Для этого нужно либо нажать на кнопку Начать отладку, либо нажать клавишу F5 на клавиатуре, либо выполнить команду меню Отладка > Начать отладку, рис. 2.9.
Внешне работа конфигурации в режиме отладки ничем не отличается от обычной работы. Единственно, на не слишком быстрых ПК запуск конфигурации проходит дольше, система может работать медленнее.
Рассмотрим некоторые методы отладки.
Ошибки в программе
Если в программе происходит ошибка, которая делает дальнейшее исполнение программы невозможным, система выдает сообщение об ошибке. Смоделируем эту ситуацию. Откроем модуль объекта для недавно разработанного документа НачислениеЗарплаты и добавим в его начало такой код, рис. 2.10:
//Начало ошибочного кода НоваяПеременная=1/0; //Окончание ошибочного кода
Теперь запустим конфигурацию (в данный момент неважно, в каком режиме) и, откроем существующий (или создадим новый) документ НачислениеЗарплаты и попытаемся его провести. Ошибочный код находится в процедуре, которая выполняется при проведении документа.
Различные ошибки вызывают различные сообщения, в нашем случае можно наблюдать следующее сообщение, рис. 2.11.
Нажав на кнопку Подробно в этом окне, мы видим следующее окно, рис. 2.12.
Нажатие на кнопку Закрыть позволяет проигнорировать ошибку, кнопка Конфигуратор открывает Конфигуратор, а кнопка Завершить работу завершает работу программы.
После нажатия на кнопку Конфигуратор запускается Конфигуратор, в котором открыт модуль с ошибкой, курсор установлен на ошибочной строке.
Если ошибочным окажется код, который исполняется в обычном режиме работы 1С:Предприятие, произойдет то же самое.
Удалим "ошибочный" код из текста модуля.
Мы смоделировали простую и понятную ошибку, исправить ее довольно просто. При реальной работе с конфигурациями, ошибки могут быть далеко не такими однозначными. Некоторые из них, например, неверный расчет какого-то показателя, можно обнаружить, лишь проанализировав состояние программы в том месте, где, предположительно, такая ошибка возникает. Сообщения об ошибках, подобные рассмотренному выше, а так же - появление неожиданных результатов работы программы - это сигнал для отладки конфигурации, и, в частности, для использования точек останова.
Точки останова
Для того чтобы остановить выполнение программы в определенной строке, используют точки останова. Когда исполнение программы доходит до точки останова, управление передается отладчику. Точку останова устанавливают на той строке программы, которая следует за кодом, нуждающимся в тщательной проверке. Строка, на которой установлена точка останова, не выполняется.
Для того, чтобы установить точку останова, можно воспользоваться различными методами. Самый простой - сделать двойной щелчок мышью напротив нужной строки в левой части редактора кода, рис. 2.13.
На месте щелчка появится большая красная точка - это и есть точка останова. Аналогичного эффекта можно добиться, если установить курсор в нужную строку кода и нажать на клавишу F9, воспользоваться соответствующей командой контекстного меню строки или командой главного меню Отладка > Точка останова.
Для того чтобы убрать точку останова, можно сделать по ней двойной щелчок, а можно воспользоваться соответствующей командой меню.
На обычной точке останова программа останавливается в любом случае, управление переходит к отладчику. Помимо обычных, существуют точки останова с условием, команду для установки таких точек останова, можно найти около соответствующих команд для обычных. При установке точки останова с условием появляется окно, рис. 2.14, в котором нужно ввести условие, при выполнении которого программа будет остановлена.
Точку останова можно временно отключить. Для этого можно воспользоваться командой Отключить точку останова. Такой же командой точку можно включить. На рис. 2.15 вы можете видеть отключенную точку останова.
В модуле можно устанавливать столько точек останова, сколько нужно. Для того, чтобы отключить все установленные точки останова, можно воспользоваться командой Отладка > Отключить все точки останова. Причем, эта команда действует на все модули конфигурации. Для того, чтобы включить все точки останова, нужно воспользоваться командой Отладка > Включить все точки останова.
Удобным средством для управления точками останова является окно Точки останова, рис. 2.16. Его можно вызвать командой Отладка > Список точек останова.
Инструменты окна позволяют включать, отключать и удалять точки останова, задавать и редактировать условия на их срабатывание, переходить к строкам кода, на которых установлены точки останова.
Обратите внимание на то, что работать с точками останова можно во время исполнения конфигурации в режиме отладки. То есть, вы можете расставлять точки останова и настраивать их и после запуска конфигурации.
Когда код модуля открыт в отладчике после срабатывания точки останова, можно править этот код. Однако следует помнить о том, что при продолжении отладки код не компилируется автоматически. То есть в отладке находится конфигурация базы данных. Для того, чтобы отлаживать программу, в которую внесены изменения, нужно прекратить текущий сеанс отладки ( Отладка > Завершить ), и запустить отладку снова, согласившись с предложением системы обновить конфигурацию базы данных.
Итак, мы научились устанавливать и настраивать точки останова. Теперь рассмотрим возможности отладчика, которыми можно воспользоваться при остановке программы.
Исполнение программы после остановки
После остановки программы можно быстро просматривать значения переменных, просто наводя на них курсор, рис. 2.17.
В подобном режиме можно просмотреть значения далеко не всех переменных, к этой возможности мы вернемся ниже.
После того, как программа остановлена, программист может проанализировать ее и продолжить дальнейшее исполнение. А вот здесь существует несколько альтернатив. Они доступны из меню Отладка, рис. 2.18.
Продолжить отладку | - выбор этой команды (или нажатие на F5 ) позволяет продолжить отладку после остановки либо, если отладка еще не начата (в таком случае команда называется Начать отладку, но для ее запуска можно использовать ту же горячую клавишу - F5 ), запустить ее. |
Перезапустить | - эта команда нужна для перезапуска отладки. В частности, она полезна в том случае, если в код во время отладки были внесены изменения, и вы хотите продолжать отладку с учетом этих изменений. |
Завершить | - завершает отладку, закрывает 1С:Предприятие (но не Конфигуратор ) |
Остановить | - "ручной" аналог срабатывания точки останова |
Остановка по ошибке | - открывает окно, рис. 2.19, которое позволяет задавать параметры остановки при возникновении ошибок, а так же - указывать тексты отдельных ошибок, при возникновении которых следует остановить отладку. Если в этом окне установлен флаг Останавливаться по ошибке, при возникновении ошибки управление будет передано в отладчик. Этой возможностью полезно пользоваться на начальном этапе отладки решения, когда еще точно неизвестно, где именно могут возникать ошибки. |
На рис. 2.20 вы можете видеть часть меню Отладка, отвечающая за различные режимы пошагового (построчного) исполнения модуля после остановки. Обратите внимание на то, что при остановке выполнения модуля строка, которая будет исполнена следующей, обозначена желтой стрелочкой, которая находится там же, где расположены маркеры точек останова.
Шагнуть в | - имеет смысл в том случае, если при построчном исполнении кода вы встретились с вызовом внешней процедуры (например, объявленной в общем модуле). Эта команда позволяет перейти к построчному исполнению вызываемой процедуры. Если выполнить ее для строки, в которой нет вызова внешней процедуры, код строки будет исполнен и маркер текущей строки (желтая стрелочка) переместится на следующую строку. |
Шагнуть через | - в противоположность предыдущей команде, при встрече с вызовом внешней процедуры в отлаживаемом модуле, позволяет выполнить эту процедуру в обычном режиме и возвратиться к пошаговому выполнению отлаживаемого модуля. При выполнении строк модуля, не содержащих вызовов внешних процедур, аналогична предыдущей. |
Шагнуть из | - если вы, отлаживая модуль, выполнили команду Шагнуть в и попали во внешнюю процедуру, но решили на каком-то этапе отладки, выйти из нее и вернуться к исходному модулю, воспользуйтесь этой командой. |
Идти до курсора | - если сработала точка останова и вы хотите, чтобы были исполнены несколько строк кода до определенной строки программы, в эту строку нужно установить курсор и выполнить эту команду. Например, на рис. 2.21 после срабатывания точки останова курсор был установлен в строку, до которой нужно было выполнить программу, и выполнена эта команда. |
Текущая строка | - эта команда показывает текущую строку выполнения отлаживаемого модуля - то есть ту, которая отмечена желтой стрелкой. На экране отображается окно модуля, при необходимости текст модуля прокручивается до нужной строки. |
Как мы уже говорили выше, во время прерывания работы программы на точке останова или при пошаговом ее исполнении, мы можем просматривать значения переменных. Собственно говоря, это - способ "заглянуть" в программу с целью ее анализа и поиска ошибок.