Если принимающее коммуникационное устройство не обеспечивает замещения символов, | независимо от того, указа- | I на фраза REPLACING (ЗАМЕНЯЯ) или нет, | литеры, передан- г при помощи оператора SEND (ПОСЛАТЬ), могут быть нало- ^viibi на символы, предварительно переданные на ту же строку, начиная с крайней левой позиции строки.
Если принимающее коммуникационное устройство не обеспечивает наложения одного или более символов на одну и ту же позицию, I независимо от того указана фраза REPLACING | I (ЗАМЕНЯЯ) или нет, I символы, переданные при помощи оператора SEND (ПОСЛАТЬ), замещают все символы, лпредваритель-но переданные на ту же строку, начиная с крайней левой позиции строки.
Часть 15. МОДУЛЬ ОТЛАДКИ
ВВЕДЕНИЕ В МОДУЛЬ ОТЛАДКИ
Назначение
Модуль отладки предоставляет средства для описания пользователем своего алгоритма отладки, включающего условия, по которым можно следить за данными или процедурами во время выполнения объектной программы.
Выбор объектов, подлежащих слежению, и соответствующей .' выдаваемой информации является обязанностью пользовате. , Средства отладки в Коболе обеспечивают удобный доступ к соответствующей информации.
Модуль отладки является устаревшим элементом в настоящем стандарте и будет удален в следующей редакции стандарта.
Характеристика уровней
Уровень 1 отладки предоставляет основные средства отладки, включающие выборочное слежение за процедурами.
Уровень 2 отладки предоставляет полные средства отладки, имеющиеся в Коболе.
Понятия языка
Возможности отладки
Модуль отладки в языке Кобол поддерживает следующие возможности:
переключатель времени компиляции — фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ);
переключатель, действующий во время исполнения;
оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ);
специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАД- КИ).
Специальный регистр DEBUG-ITEM (ДАН- НЫЕ-ОТЛАДКИ)
Зарезервированное слово DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) является именем специального регистра, содержащего отладочную информацию и автоматически порождаемого реализацией. Для каждой программы порождается единственный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ). DEBUG-ITEM (ДАННЫЕ- ОТЛАДКИ) имеет подчиненные данные, имена которых также являются зарезервированными словами.
Переключатель времени компиляции
Переключатель времени компиляции управляет компиляцией отладочных строк; он устанавливается фразой WITH DEBUGGING
MODE (В РЕЖИМЕ ОТЛАДКИ), которая должна быть указана в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА). Если эта фраза в программе указана, все отладочные строки компилируются как указано в этом разделе документа. Если эта фраза в программе не указана, все отладочные строки и секции рассматриваются при компиляции как строки комментариев.
Переключатель, действующий во время исполнения
Переключатель, действующий во время исполнения, динамически активизирует отладочные коды, встроенные компилятором. К этому переключателю нельзя обращаться в Кобол-программе, он управляется вне среды Кобола. Если он «включен», разрешаются все указанные в исходной программе отладочные действия. Если этот переключатель «выключен», действия, описанные в п. 3.2 настоящей части, подавляются; при этом нет необходимости перекомпиляции исходной программы. Если в исходной программе фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, то переключатель, действующий во время исполнения, не оказывает влияния на выполнение объектной программы.
РАЗДЕЛ ОБОРУДОВАНИЯ В МОДУЛЕ ОТЛАДКИ
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ)
Назначение
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) указывает, что все отладочные секции должны компилироваться Если эта фраза не указана, все отладочные секции компилируются так, как если бы они были строками комментариев.
Общий формат
SOURCE-COMPUTER, [имя-машины [WITH DEBUGGING MODE] . ]
ИСХОДНАЯ-МАШИНА. [имя-машины [В РЕЖИМЕ ОТЛАДКИ] .]
Общие правила
Если в параграфе SOURCE-COMPUTER (ИСХОДНАЯ- МАШИНА) секции конфигурации программы указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), компилируются все операторы USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
Если в секции конфигурации программы в параграфе SOURCE-COMPUTER (ИСХОДНАЯ-МАШИНА) фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, все операторы USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и все соответствующие отладочные секции рассматриваются при компиляции как строки комментариев.РАЗДЕЛ ПРОЦЕДУР В МОДУЛЕ ОТЛАДКИ
Общее описание
Если оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) из модуля отладки задается в исходной Кобол- программе, раздел процедур содержит декларативные процедуры. Ниже показан общий формат раздела процедур при задании оператора USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАД-
PROCEDURE DIVISION.
DECLARATIVES.
{имя-секции SECTION.
оператор USE FOR DEBUGGING.
[имя-параграфа.
[предложение] ...]...}...
END DECLARATIVES.
{имя-секции SECTION.
[имя-параграфа.
[предложение] ...]...}...
РАЗДЕЛ ПРОЦЕДУР.
ДЕКЛАРАТИВЫ.
{СЕКЦИЯ имя-секции.
оператор ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ, [имя-параграфа.
[предложение] ... ] ...}...
КОНЕЦ ДЕКЛАРАТИВ.
{СЕКЦИЯ имя-секции.
[имя-параграфа.
[предложение] ... ] ...}...
Оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ)
Назначение
В операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) пользователь указывает данные, за которыми необходимо следить посредством соответствующей отладочной секции.
Общий формат
USE FOR DEBUGGING ON
имя-коммуникации-1
[ALL REFERENCES OF] идентификатор-1
имя-файла-1
имя-процедуры-1
ALL PROCEDURES
ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ ПРИ
имя-коммуникации-1
[ВСЕХ ССЫЛКАХ НА] идентификатор-1
имя-файла-1
имя-процедуры-1
ВСЕХ ПРОЦЕДУРАХ I
Синтаксические правила
Если отладочные секции указаны, то они должны следовать друг за другом непосредственно за заголовком DECLARATIVES (ДЕКЛАРАТИВЫ).
В отладочной секции в операторах, отличных от оператора USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ), нельзя обращаться к процедурам, содержащимся в недекларативной части раздела процедур.
Операторы, появляющиеся вне отладочных секций, не должны ссылаться на имена-процедур, определенные в отладочных секциях.
Операторы, появляющиеся в одной из отладочных секций, могут ссылаться на имена-процедур, определенные в другой отладочной секции, только посредством оператора PERFORM (ВЫПОЛНИТЬ).
Исключение составляет только оператор USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
Имена-процедур, определенные в отладочных секциях, не должны появляться в операторах USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ).
Каждый из I идентификаторов, имен-файлов, имен-ком- | I муникаций или । имен-процедур может появляться только в од- ' ном операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и только один раз.
Фраза ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) может появляться только один раз в программе.
Если указана фраза ALL PROCEDURES (ПРИ ВСЕХ ’ОЦЕДУРАХ), то ни в каком другом операторе USE FOR DEBUGGING ’(ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) не должны указываться имена-процедур.
Идентификатор-1 не должен представлять данные, определенные в секции отчетов, за исключением счетчиков сумм.
Если статья описания данного, представленного идентификатором-1, содержит фразу OCCURS (ПОВТОРЯЕТСЯ) или подчинена статье с фразой OCCURS (ПОВТОРЯЕТСЯ), то идентификатор-1 должен указываться без обычного необходимо- го индексирования..(11) Ссылки на специальный регистр DEBUG-ITEM (ДАН- НЫЕ-ОТЛАДКИ) допускаются только в пределах отладочных секций.
(12) Идентификатор-1 |
не должен |
быть |
модификацией |
ссылки. |
|
|
|
3.2.4. Общие правила
(1) Операторы, встречающиеся в секции отладки, не вызываю г автоматического выполнения секции отладки.
Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) задано имя-файла-1, соответствующая секция отладки выполняется:
после выполнения операторов OPEN (ОТКРЫТЬ) или CLOSE (ЗАКРЫТЬ), ссылающихся на имя-файла-1;
после выполнения оператора READ (ЧИТАТЬ) (после других указанных процедур USE (ИСПОЛЬЗОВАТЬ)), не вызвавшего выполнения соответствующего повелительного оператора, указанного фразами AT END (В КОНЦЕ) или INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА);
после выполнения операторов DELETE (УДАЛИТЬ) или START (ПОДВЕСТИ), ссылающихся на имя-файла-1.
Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) указано имя-процедуры-1, соответствующая отладочная секция выполняется:
непосредственно перед каждым выполнением названной процедуры;
непосредственно после выполнения оператора ALTER (ИЗМЕНИТЬ), ссылающегося на имя-процедуры-1.
Фраза ALL PROCEDURES (ПРИ ВСЕХ ПРОЦЕДУРАХ) вызывает выполнение действий, указанных в общем правиле 3 для всех имен-процедур программы, кроме процедур, определенных в отладочных секциях.
Если указана фраза ALL REFERENCES OF идентифика- I тор-1 (ПРИ ВСЕХ ССЫЛКАХ НА идентификатор-1), соответ ствующая отладочная секция выполняется для каждого опера тора, явно ссылающегося на идентификатор-1 в каждом из следующих случаев:
в случае операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ) выполнение отладочной секции происходит до выполнения операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ), но после выполнения неявных перемещений, вызванных наличием в указанных операторах фразы FROM (ИЗ ПОЛЯ);
в случае оператора GO ТО (ПЕРЕЙТИ) с фразой DEPENDING ON (В ЗАВИСИМОСТИ ОТ) соответствующая ' отладочная секция выполняется непосредственно перед переда- ' чей управления и до выполнения отладочной секции, связанной
с именем-процедуры, которой передается управление;
в случае оператора PERFORM (ВЫПОЛНИТЬ), ссылающегося на идентификатор-1 посредством фраз VARYING (МЕНЯЯ), AFTER (ЗАТЕМ) или UNTIL (ДО) — непосредственно после присвоения начального значения, изменения или вычисления значения данного, представленного идентификатором-1;
для всех других операторов Кобола — непосредственно после выполнения оператора.
Если ссылка на идентификатор-1 производится во фразе, которая не выполняется, соответствующая отладочная секция также не выполняется.
(6) Если указан идентификатор-1 без фразы ALL REFERENCES OF (ПРИ ВСЕХ ССЫЛКАХ НА), соответствующая секция отладки выполняется в следующих случаях:
а* в случае операторов WRITE (ПИСАТЬ) или REWRITE (ОБНОВИТЬ) соответствующая отладочная секция выполняется непосредственно перед выполнением этих операторов и после неявных перемещений, указанных фразой FROM (ИЗ ПОЛЯ);
б) в случае оператора PERFORM (ВЫПОЛНИТЬ), ссылающегося на идентификатор-1 посредством фраз VARYING (МЕНЯЯ), AFTER (ЗАТЕМ), UNTIL (ДО), непосредственно после присвоения начального значения, модификации и вычисления значения данного, представленного идентификатором-1;
в) для всех других операторов Кобола, явно ссылающихся на идентификатор-1, непосредственно после выполнения оператора, приводящего к изменению значения данного, представленного идентификатором-1.
Если ссылка на идентификатор-1 производится во фразе, которая не выполняется, соответствующая отладочная секция не выполняется.
Независимо от количества ссылок на некоторый идентификатор в пределах одного оператора, соответствующая отладочная секция выполняется для одного выполнения оператора не более одного раза. Исключение еоставляет оператор PERFORM (ВЫПОЛНИТЬ), вызывающий итеративное выполнение процедуры, для которого соответствующая отладочная секция может выполняться один раз для каждой итерации. Каждое отдельное вхождение повелительного глагола в повелительном операторе рассматривается с точки зрения отладочных действий как отдельный оператор^ ■
Если в операторе USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) указано имя-коммуникации-1, соот- ватствующая отладочная секция выполняется:после выполнения операторов ENABLE (РАЗРЕШИТЬ), DISABLE (ЗАПРЕТИТЬ) и SEND (ПОСЛАТЬ), ссылающихся на имя-коммуникации-1;
после выполнения ссылающегося на имя-коммуникации-1 оператора RECEIVE (ПОЛУЧИТЬ), не вызывающего выполнение повелительного оператора, указанного во фразе NO DATA (НЕТ ДАННЫХ);
после выполнения ссылающегося на имя-коммуникации-1 оператора ACCEPT MESSAGE COUNT (ПРИНЯТЬ ЧИСЛО СООБЩЕНИИ).
Ссылка на идентификатор-1, имя-коммуникации-1, имя-
I файла-1 или имя-процедуры-1 как на уточнитель не является ссылкой на этот элемент для отладки, описанной в вышеперечисленных общих правилах.
С каждым выполнением отладочных секций связывается специальный регистр DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ), в котором представляется информация об условиях, вызвавших данное выполнение отладочной секции.
DEBUG-ITEM (ДАННЫЕ-ОТЛАДКИ) имеет следующее неявное описание:
01 DEBUG-ITEM.
02 DEBUG-LINE PICTURE IS X(6).
02 FILLER PICTURE IS X VALUE IS SPACE.
02 DEBUG-NAME PICTURE IS X(30).
02 FILLER PICTURE IS X VALUE IS SPACE.
02 DEBUG-SUB-1 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER.
02 FILLER PICTURE IS X VALUE IS SPACE.
02 DEBUG-SUB-2 PICTURE IS S9999 SIGH IS LEADING SEPARATE CHARACTER.
02 FILLER PICTURE IS X VALUE IS SPACE.
2 DEBUG-SUB-3 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER.
02 FILLER PICTURE IS X VALUE IS SPACE.
02 DEBUG-CONTENTS PICTURE IS X (n).
01 ДАННЫЕ-ОТЛАДКИ.
02 СТРОКА-ОТЛАДКИ ШАБЛОН X(6).
02 ЗАПОЛНИТЕЛЬ ШАБЛОН X ЗНАЧЕНИЕ ПРОБЕЛ.