| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Отладчик PAL является мощным средством, используемым для тестирования скриптов и нахождения ошибок. С помощью него можно:
Отладчик является частью интегрированной среды PAL. Настоящая глава содержит инструкции по запуску отладчика, работе с ним и выходу из него. В конце главы приведен простой пример диалога с отладчиком, иллюстрирующий методику отладки.
Существуют четыре способа запуска отладчика:
Cancel Debug Begin debugging script. Войти в редактор можно, выбирая из него опцию Debug. При этом текущей командой редактирования будет команда, в которой обнаружена ошибка. Вспомните, что в главе 7 были описаны 2 типа ошибок, детектируемых PAL:
Отладчик можно использовать для детектирования и исправления обоих видов ошибок. Кроме того, если встретилась ошибка исполнения, возможно дальнейшее выполнение скрипта после изменения некоторых его команд или режима, в котором выполняются эти команды. Если встретилась синтаксическая ошибка, ее необходимо отредактироваить и запустить скрипт снова. 2. Если в скрипт включена команда Debug, то в результате ее обработки вы войдете в режим редактирования. При этом текущей командой будет команда, следующая за Debug. 3. Для прерывания выполнения скприпта следует нажать {Ctrl}{Break}. Будет высвечено меню Script/Error. Для входа в редактирование выберите опцию Debug. Текущей командой будет команда, следующая за той, что была выполнена последней перед прерыванием. 4. Войдите в меню PAL ({Alt}{F10}), а затем выберите опцию Debug. После этого введите имя редактируемого скрипта. Текущей командой будет первая команда скрипта. Первые три метода позволяют вам редактировать выполняемый скрипт.
Отладчик использует только две нижних строки экрана для трассировки команд тестируемого скрипта. Работа скрипта находится полностью под вашим управлением. В процессе работы отладчика можно наблюдать или канву PAL, или рабочую область системы Paradox, в зависимости от того, что требуется текущей инструкцией вашего скрипта. Кроме выполнения инструкций отлаживаемого скрипта вы можете управлять системами PAL и Paradox с помощью меню ситсемы Paradox {F10} или меню отладчика {Alt}{F10}.
При запуске отладчика текущая команда тестируемого скрипта
загружается и интерпретируется. Это значит, что любые синтаксические ошибки в команде находятся немедленно.
| Script A | . | . | . | Play C | . | . | . Уровень 2 ------------------------------------------ | Script C | . | . | . | [Field] = [Field]*2.0 | . | . | . Уровень 3 --------------------------- | Script Error | [not in Edit mode] | | | | | Рис.11-1. Уровни вложения скриптов.
С помощью отладчика PAL можно отлаживать вложенные скрипты и процедуры. Предположим, выполнение вашей прикладной системы начинается со скрипта А (уровень 1), который обращается к процедуре В (уровень 2), запускающей скрипт С (уровень 3), который содержит ошибку. Как показано ра рис. 11-1, каждый раз, когда происходит оброащение к процедуре или запускается скрипт, уровень отладки возрастает на единицу. Каждый раз при завершении выполнения скрипта или процедуры происходит уменьшение уровня отладки на единицу.Заметьте, что при работе в режимах Value или MiniScript из меню отладчика уровень отладки тоже увеличивается на единицу. Отладка длится до тех пор, пока работает скрипт или процедура первого уровня, или пока вы не покинули отладчик. Часто бывает важно знать текущий уровень отладки. Для этого можно воспользоваться опцией Where?. Опция Рор применяется для того, чтобы покинуть текущий уровень отладки и перейти на один уровень выше. Оба эти средства описаны ниже в этой главе. Помните, что некоторые переменные являются ограниченными в определенных процедурах, в то время как другие являются глобальными для всех скриптов или процедур. Если вы изменяете значения переменных с помощью минискриптов, это может отразиться на их значениях в других уровнях отладки. Отладка библиотечных процедур Если отлаживаемый скрипт обращается к процедуре, содержащейся в библиотеке, то первоначальный текст этой процедуры должен быть доступен PAL. Чтобы сделать его доступным, необходимо, чтобы скрипт, содержащий определения процедуры, был в наличии в том каталоге, из которого он был первоначально записан в бибилиотеку.
Если вы находитесь в отладчике, вы сразу это заметите, так как при этом в нижних двух строках экрана высвечивается информация о выполнении скрипта:
Так как две нижние строки заняты, сообщения об ошибках высвечиваются в окне, находящемся выше них. Если ошибки нет, все остальное пространство экрана выглядит также, как если бы отладчик не был запущен. Строка состояния | v
Script: testScrp Line 3 ^ ^ | | "строка скрипта" курсор отладчика Рис. 11-2. Экран отладчика.
Таблица 11-1. содержит функциональные клавиши, используемые отладчиком. Кроме клавиши {Alt}{F10}, высвечивающей меню отладчика, все остальные клавиши дублируют режимы меню. Эти режимы описаны ниже в настоящей главе. Функциональные работают только когда отладчик активен. Табл. 11-1. Функциональные клавиши отладчика Клавиши Функция {Ctrl}{E} Редактирование скрипта {Alt}{F10} Высвечивание меню отладчика {Ctrl}{P} Изменение уровня отладки {Ctrl}{G} Повторный запуск скрипта {Ctrl}{N} Пропуск текущей команды скрипта {Ctrl}{S} Выполнение текущей команды {Ctrl}{W} Текущий уровень отладки {Ctrl}{Q} Выход из отладчика
Меню отладчика выглядит так: Value Step Next Go MiniScript Where? Quit Pop Editor Calculate the value of an expression. Оно может быть вызвано с помощью клавиш {Alt}{F10} в любой момент времени, если отладчик активен. Меню имеет 9 режимов:
Если вы вошли в отладчик после обнаружения синтаксической ошибки, использовать режимы Step, Next и Go нельзя. Все остальные функции использовать можно, независимо от того, каким образом вы вошли в отладчик.
Функция Value, камк и ее тезка в меню PAL (см. главу 8) является мощным калькулятором, с помощью которого можно определить значение любого выражения PAL. Когда вы активизируете эту функцию, PAL попросит вас ввести выражение, значение которого необходимо определить:
Expression: Можно ввести выражение длиной до 175 символов, используя {Alt}{F5} или {Ctrl}{F} для просмотра и редактирования выражения (см. раздел "Просмотр поля" в главе 2 руководства пользователя системы Paradox. Версии 1.0 и 1.1 поддерживают выражения длиной до 50 символов.). После нажатия клавиши {Enter} PAL вычисляет и высвечивает величину выражения в окне сообщений в правом нижнем углу экрана. Сообщение будет сохраняться до тех пор, пока вы не нажмете следующую клавишу. Функция Value полезна для выяснения того, является ли данная переменная, элемент массива или выражение причиной ошибки.Ес- ли текущий отлаживаемый объект является процедурой, вы можете выяснить значения ее формальных параметров и ограниченных перменных. Ниже приведено несколько примеров выражений, значения которых можно вычислить таким образом:
Как и режим PALMenu/Value, режим Debug/Value запускает короткий скрипт с именем value, содержащий команду: RETURN expression где expression - выражение, которое необходимо вычислить. Таким образом, использование режима value само по себе может привести к ошибке, если выражение содержит синтаксическую ошибку или неприсвоенную переменную. В этом случае вы, находясь в режиме отладки, еще раз перейдете в режим отладки. В сторке состояния будет высвечено имя отлаживаемого скрипта - value, а строкой ниже - ошибочное выражение. В этом случае вы можете:
В режиме Step PAL выполняет текущую команду скрипта и перемещает курсор отладчика к следующей команде. Вы можете использовать Step для покомандного выполнения скрпта или процедуры. Следует помнить, что каждая команда интерпритируется непосредственно перед выполнением. Таким об разом,при каждом шаге покомандного выполнения детектируются ошибки исполнения, встретившиеся в текущей команде, и синтаксические ошибки следующей команды. Если команда с синтаксической ошибкой занимает более одной строки, отладчик высвечивает ту строку, где найдена ошибка. Информация, которая высветится при покомандном исполнении скрипта, будет зависеть от того, какой вид команд вы используете:
Если вы вошли в отладчик в результате ошибки скрипта, то в режиме Step первой будет выполняться команда, где обнаружена ошибка. Если вы не исправили условия, вызвавшие ошибку, она повторится. Вы можете также выбрать режим Next, чтобы пропустить выполнение команды, вызвавшей ошибку. Если вы вошли в отладчик из-за синтаксической ошибки, режим Step использовать нельзя. Необходимо исправить ошибку и запустить скрипт сначала.
При выборе режма Next или нажатии {Ctrl}{N} текущая команда пропускается,и курсор отладчика перемещается к следующей команде. С помощью этого режима можно пропустить команду, вызвавшую ошибку исполнения. Можно также запустить минискрипт для того, чтобы исправить ошибку перед тем, как запустить скрипт снова. Не забывайте исправлять ошибочную команду перед повторным запуском скрипта. Как и с помощью Step, с помощью Next нельзя пропустить команду, вызвавшую синтаксическую ошибку.
Команда Go или клавиша {Ctrl}{G} предназначены для повторного запуска скрипта, начиная с текущей команды. Если текущая команда принадлежит вложенному скрипту, то выполнение продлится до завершения самого внешнего скрипта, если не встретится новая ошибка, или не будет введена новая команда отладки. Команду Go нельзя использовать, если встретилась синтаксическая ошибка. Если встретилась ошибка исполнения, перед повторным запуском убедитесь в том, что причина ошибки ликвидирована, иначе при вводе команды Go она повторится немедленно.
Команда MiniScript для ввода и исполнения коротких скриптов (длиной до 175 символов). Этот режим похож на PALMenu/MiniScript. При выборе режима MiniScript, PAL попросит вас ввести содержание скрипта:
Command: Допускаются любые правильные команды скрипта, кроме определений процедур, и использование клавиш просмотра полей {Alt}{F5} или {Ctrl}{F} для просмотра и редактирования минискрпипта. ( Подробности содержатся в главе 2 руководства пользователя системы Paradox. Версии 1.0 и 1.1 системы Paradopx поддреживают минискрипты длиной до 50 символов.) Основное отличие режима Debug/MiniScript от PALMenu/MiniScript в том, что при работе в первом режиме скрипт не запускается сразу после того, как вы нажали {Enter}. Вместо этого минискрипт становится текущим скрптом, вложенным в отлаживаемый скрипт, и высвечивается в окне отладчика в нижней части экрана. Для запуска минискрипта следует использовать команду Step (покомандный запуск) или Go. При завершении минискрипта управление передается отлаживаемому скрипту. Минискрипты особенно полезны для создания "мгновенных слепков", необходимых для восстановления программы после ошибок исполнения. Например, если вы забыли присвоить значение переменной перед тем, как использовать ее в выражении, при обработке этого выражения возникнет ошибка. При этом можно войти в отладчик, с помощью минискрипта присвоить значение переменной, а затем продолжить выполнение скрипта с помощью команды Go. Не забудьте исправить скрипт позднее с помощью редактора. Команды, вводимые вами в минискрипт, система записывает в короткий скрипт с именем Mini. Аналогично работе в режиме Value в случае возникновения ошибки в минискрипте снова включается отладчик, при этом уровень отладки становится на единицу глубже перво начального. В этом случае можно выйти из режима Miniscript с помощью команды Pop. Заметьте, что для редактирования минискриптов нельзя пользоваться редактором скриптов. Если переменная является ограниченной в отлаживаемой процедуре, любая ссылка на нее в минискрипте является обращением к ограниченной переменной.
Чтобы получить картину вложения текущего скрипта в другие скрипты или процедуры, следует выбрать режим Where? или нажать {Ctrl}{W}; при этом высвечиваются также величины формальных параметров и ограниченных переменных, определенных в процедурах. Возврат к отладке происходит после нажатия любой клавиши. Этот режим полезен в сложных прикладных системах для выяснения, какой скрипт или процедура содержит интересующую вас ошибку. Он также полезен, когда вы совершили ошибку при обработке ошибки и не знаете точно текущего уровня отладки. Если ваши скрипты имеют много уровней вложения, картинка режима Where? может не поместиться на экране. При нажатии любой клавиши будет воспроизведена оставшаяся часть картинки. Перед тем, как возвратиться к отладке, необходимо просмотреть все картинки режима Where?.
Завершение работы отладчика и прекращение работы всех отлаживаемых скриптов происходит после выбора из меню опции Quit или нажатие клавиш {Ctrl}{Q}. При этом все определения процедур отлаживаемого скрипта удаляются из оператиной памяти. Величины переменных и массивов, присвоенные скриптом, сохраняются после выхода из отладчика.
При выборе режима Pop или нажатии {Ctrl}{P} завершается выполнение текущего скрипта или процедуры и продолжается выполнение программного модуля, вызвавшего этот скрипт или процедуру (ес- ли такие есть). Если текущий скрипт является скриптом верхнего уровня, то команда Pop действует аналогично команде Quit. Команда Pop осбенно удобнаю для выхода из режимов Value или MiniScript, так как оба этих режима запускают скрипты.
При выборе режима Editor или нажатии {Ctrl}{E} происходит выход из отладчика непосредственно в редактор скриптов. При этом редактируемым скриптом становится текущий отлаживаемый скрипт, а курсор редактора устанавливается на строку этого скрипта, бывшую текущей в процессе отладки. Редактор PAL описан в главе 10. Если при запуске программы CCP вы ввели имя своего собственного редактрора, ваш редактор будет включаться вместо редактора скриптов PAL. Когда редактирование скрипта завершено, для его повторного запуска можно ввести команду Go из меню редактора. Если редактор является вашим собственным редактором, эта опция в нем, разумеется, отсутствует. Однако, вы можете нажать клавиши {Ctrl}{G} после выхода из редактора в систему Paradox. Если вы желаете продолжить отладку скриптов, вам следует нажать {Ctrl}{Break} и войти в редактор из меню Script Error, или ждать появления ошибки в скрипте.
Существует несколько способов завершения отладки и выхода из отладчика. Для этого предназначены два режима меню, завершающих режим отладки:
Отладка завершается и в некоторых друших режимах:
Кроме того, отладка завершается, если в процессе нее в текущем скрипте встретились команды:
После завершения работы отладчика:
УЧЕБНЫЙ КУРС РАБОТЫ С ОТЛАДЧИКОМ В настоящем разделе на примере отладки простого скрипта про демонстрированы приемы работы с отладчиком. Работая на автономном компьтере, поместите в дисковод А дискету с именем Sample Tables. С помощью опции Tools/Copy скопируйте скрипт debugtst с дискеты в рабочий каталог системы Paradox. Если ваша система включена в сеть, скопируйте debugtst из общей области данных системы Paradox в ваш каталог. Заметьте: если вы подключили к системе Paradox вместо редакторов скриптов свой собственный редактор, вам необходимо изменить команды редактирования так, чтобы они воспринимались этим редактором. На рис. 11-3 приведена распечатка скрипта debugtst. 1 ;Заметьте: этот скрипт содержит ошибки!!!!!!! 2 PROC SomeText() ;определяет процедуру, высвечивающую ; текст 3 @4,0 ;устанавливает положение курсора 4 STYLE REVERSE ;устанавливает режим инвертированного ;изображения 5 ?title ;печатает заголовок экрана 6 STYLE ;устанавливает режим нормального
;изображэения 20 @4,0 ;устанавливает курсор в 0 позиции ;четвертой строки 21 SHOWMENU ;создает демонстрационное меню 22 "Test" :"This is Just a test menu item", 23 "Quit" :"Yet another test menu item", 24 "Exam" :"We'll bet you guessed this was another test
menu item"
;бор не правилен
42 ENDSWITCH Рис. 11-3. Распечатка тестового скрипта. В приведенном выше скрипте допущены две ошибки:
Рассмотрим последовательность отладки этого скрипта.
Т.е. экран будет представлять собой канву PAL с наложенной на нее информацией отладчика. После того, как вы ввели имя скрипта, PAL приготовился запустить его через отладчик. При этом на экране (см. главу 13) инициализируется канва. В данном случае канва содержит главное меню системы Paradox и выглядит как ее рабочая область. Канву PAL, тем не менее, легко отличить от рабочей области системы Paradox: если высвечивается канва, то на экране присутствует курсор в первой позиции первой строки (в данном случае на букве V слова View ). Далее вы можете действовать несколькими способами:
при поиске ошибки следует обращать внимание не только на текущую строку, но и на предыдущую. 4. Для исправления синтаксической ошибки следует обратиться к редактору скриптов. Когда в редакторе будет высвечен скрипт, обратите внимание, что курсор будет находиться в той строке, где отладчик обнаружил ошибку. Вставьте запятую в конце предыдущей строки. Для завершения редактирования нажмите клавишу F2. При этом отредактированный скрипт будет сохранен на диске. Можно также выбрать режим Go из меню редактора. Если вы нажали клавишу F2, обратитесь к меню PAL и выберите опцию Debug. В этот раз попробуйте исполнить скрипт покомандно. Обратите внимание, что строка состояния отладчика и текущая строка отлаживаемого скрипта изменяются после каждого шага (нажатие {Ctrl}{S}). Обратите также внимание, что некоторые строки, в частности, тело процедуры SomeText как будто бы не обрабатываются. На самом деле, строки процедуры высвечиаются только при ее исполнении, а не в момент ее определения. Система Paradox замечает ключевое слово PROC, добавляет SomeText к списку активных процедур и перемещается к первой команде, следующей за телом процедуры. Когда вы достигнете команды SHOWMENU, высветится меню. После этого единственным ответом на нажатие {Ctrl}{S} будет звуковой сигнал: это происходит потому, что PAL ждет входной информации, т.е. выбора из меню. Обратите внимание, что строки команды SHOWMENU не появляются в нижней стоке экрана (если в них нет ошибок), так как они являются частью конструкции SHOWMENU. 5. Выберите из меню опцию Quiz и продолжить выполнение скрипта. Так как скрипт обращается к процедуре SomeText, то при пошаговом выполнении после обработки команды вызова этой процедуры в окне отладчика будут появляться команды тела процедуры. Скоро вы увидите другую ошибку. 6. Для того, чтобы выяснить, на каком уровне отладки вы находитесь, выберите опцию Where?. Вы обраружите, что вы находитесь на третьем уровне отладки. Первый уровень - это уровень скрипта Debugtst, второй уровень - уровень процедуры SomeText, уровень отладчика - третий уровень. 7. Выйдите из режима Where?, нажав любую клавишу. В нижней части экрана вы увидите следующую ошибку в четвертой строке скрипта. Курсор отладчика будет находиться между командой ? и именем переменной title. Ошибка очевидна. Вы забыли присвоить значение переменной. 8. Чтобы присвоить переменной значение для продолжения отладки, войдите в режим MiniScript, затем введите недостающее выражение: title = format("w80,ac","this is a title") 9. Для выяснения, где вы находитесь, нажмите {Ctrl}{W}. Вы снова увидите экран Where?. Вспомните, что минискрипт является скриптом, вложенным в текущий скрипт или процедуру. Поэтому экран Where? содержит информацию об уровне "Script Mini". 10. Выйдите из режима Where?, нажав любую клавишу. 11. Так как текущей строкой является строка минискрипта, выполните ее с помощью {Ctrl}{S}. После повторного нажатия {Ctrl}{S} на экране появится заголовок, а затем и текст SomeText. 12. Нажмите {Ctrl}{S}, когда появится команда Sleep 5000. Заметьте, что в течение нескольких секунд как будто бы ничего не происходит. На самом деле происходит выполнение команды Sleep - пятисекундная пауза. 13. Продолжайте покомандное выполнение программы. Снова появится меню. Выберите опцию Exit. Вы увидите, что текущей строкой станет строка с команой Quit. Но это лишь одна из альтернатив команды Case. А ведь вы не видели в текущей строке ключевого слова Case! Мы рекомендуем вам отлаживать скрипты, имея в руках их распечатку с пронумерованными строками. Посмотрев в распечатку, вы увидите, что Quit является ветвью команды Switch, соответствующей опции меню Exit. Если бы вы не взглянули на распечатку, вы бы, наверное, не узнали, какая из команд Quit является текущей. 14. Нажав {Ctrl}{S}, выполните команду Quit, завершающую выполнение скрипта. На экране появится главное меню и рабочая область системы Paradox. Вы завершили тестирование Debugtst. 15. Вспомните, что исправление текста скритпа не завершено. Ведь вам пришлось использовать минискрипт для присвоения величины переменной Title. Поэтому сейчас самое время запустить редактор скриптов и добавить недостающую строку: title = format("w80,ac","this is a title") Вы должны вставить ее перед командой ? Title в любом удобном для вас месте. ПРЕДОСТЕРЕЖЕНИЕ: Помните, что, если переменная однажна определена, она сохраняет свое значение в течение всего сеанса работы с сиситемой Paradox. Если вы попробуете запустить скрипт снова, не исправив ошибку, он будет выполняться правильно, несмотря на то, что переменной Title не присваивается значение в теле скрипта. Мы рекомендуем вам перед тестированием одного скрипта после запуска другого выполнить минискрипт: RELEASE VARS ALL для удаления всех переменных предыдущего скрипта. Хотя наш пример демонстрирует не все средства отладчика, мы надеемся, что вы сами почувствуете его мощь и гибкость, отлаживая свои скрипты. [Назад][Содержание] |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|