Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [ 57 ] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Запуск отладчика

Отладчик Perl запускается из командной строки операционной системы. В системах DOS и Windows в качестве приглашения на ввод команды обычно используется С:\>. В UNIX приглашение командной оболочки появляется после регистрации пользователя в системе и обычно имеет вид % или $. На компьютерах Macintosh для запуска отладчика выберите команду Debugger из меню Script. В результате на экране появится диалоговое окно отладчика.

Во всех примерах данного занятия используется программа Employee (см. листинг 9.1), о которой шла речь на 9-м занятии, "Дополнительные функции и операторы". Поэтому имеет смысл сделать закладку на странице 97, чтобы при необходимости быстро найти текст программы. Для отладки программы Employee после приглашения операционной системы введите приведенную ниже команду (для примера мы использовали систему DOS):

С:\> perl -d Employee

Клюа, указанный в командной строке, переводит интерпретатор Perl в режим отладки. После ключа указывается имя файла, содержащего отлаживаемую программу. В результате на экран будет выведено несколько сообщений, в одном из которых содержится номер версии отладчика, как показано ниже:

ault die handler restored.

Loading EB routines om perl5db.pl version 1.07 Editor sport available.

Enter h ~h for help, rldebog for more help.

main::(EmployeesS): щ/ eemployees=(

inain::{Ehplqyee:6): Скнт,Боб, 123101,9.35,40,

inain::(Ehplqyee:7): Фравкпин,Алиса,132912,10.15,35,

main::{Employee:8): Войоховиц,Тед,198131,6.50,39,

main:;{Employee:9): Her,Венди,141512,9.50,40,

main::{Employee:10): Клиборн,Стен,131211,11.25,40,

main::{Employee:n): ); DB<1>

Кроме номера версии (в нашем случае 1.07) отображается строка с подсказкой о

том, как можно вызвать справочную систему. Далее отладчик отображает первый оператор программы, который состоит из семи строк и начинается с фразы my @employees=(, a заканчивается закрывающейся круглой скобкой и точкой с занятой. Кроме содержимого оператора отладчик выводит дополнительную информацию

(название процедуры, имя файла и номер строки в файле), помогающую идентифицировать отлаживаемый оператор.

В последней строке отладчик помещает приглашение DB<1> и устанавливает после него курсор. Цифра 1 означает, что отладчик ожидает ввода первой команды. В описанном нами состоянии программа на Perl не запущена и находится в состоянии ожидания. При этом на экране отображается оператор, который должен быть выполнен следующим (в нашем случае ees=(), а не ТОТ, который был выполнен раньше. Команды отладчика вводятся после приглашения.



Основные команды отладчика

Одной из самых важных команд, которую вы наверняка будете часто использовать, является команда help, предназначенная для вызова справочной системы отладчика. Введите символ h, в результате на экране появится список всех команд отладчика и их краткое описание. Если после команды h указать имя требуемой команды, то отладчик выведет описание только этой команды.

Часто бывает, что описание какой-то команды не помешается на экране. При этом первые несколько строк просто "уедут" с экрана. Чтобы вывести справочную информацию постранично, поместите перед командой символ вертикальной .черты Например, чтобы вывести справку по всем командам отладчика в постраничном режиме, введите команду h.

Самой ценной возможностью отладчика Perl является его способность запускать программы в пошаговом режиме. Пользуясь этим, давайте продолжим выполнение упражнения, которое мы начали в предыдущем разделе, и перейдем к следующему оператору программы Employee. Итак, после приглашения отладчика введите команду

n (next, или следующий): n

iiain::(EiBployee:24): my ($U, $Fl)=split(,, $a>;

В результате интерпретатор Perl выполнит первый оператор программы Employee (строки с 5 по И). После этого отладчик распечатает следующий оператор, который должен быть выполнен, - иу ($Ы, $Fl) = split(,, $а); - и выведет приглашение. В результате выполнения первого оператора программы был проинициализирован массив employees. В нем будет содержаться информация по пяти сотрудникам. Чтобы распечатать значение элементов массива, воспользуйтесь оператором print, как показано ниже:

гв<1> print §employees

См8т,Боб,123101,9.35,40Франклнн,Апвса,132912,10.15,35ВОЙОХОВИЦ,Тед,198131,6.50,3 9Нег,Венди, 141512,9.50, 40Клиборн, Стен, 131211,11.25,40

После приглашения отладчика можно вводить не только его команды, но и любой оператор Perl. Обратите внимание, что в приведенном выше примере элементы массива fjemployees никак не разделяются и смешаны в кучу. Чтобы распечатать каждое значение в отдельной строке, введите после приглашения такой оператор:

га<2> print join("\n", employees) Смит,Боб,123101,9.35,40 франкпйн,Алиса,132912,10.15,35 Вояоховя1,Тел,198131,6.50,39 Нег,Веади,141512,9.50,40 Кпиборн,Стен,131211,11.25,40

Чтобы продолжить выполнение программы в пошаговом режиме, вводите каждый раз команду п, как показано ниже:

га<з>п

main::(Employee:23); 8employees=sort {

EB<3>n

main::{Siplqyee:25): my ($L2, $F2)=split(,, $b);

EB<3>n

main: :(Employee:26):, return ( $Ы aip $L2 f СравЕлом фамалии

12-й час. с комной окой Perl 189



main;; (Employee:27): i Если ом ид1т£ньь

mainL::(Ehplcyee:28): rap $F2 * тогда сравним имена

main::(Employee:29): );

EB<3>

main;:(Employee;23): eemployees=sort {

Нетрудно заметить, что отладчик, пройдя несколько операторов, снова вернулся к строке 23 так, как будто в программе организован цикл. Все дело в том, что в операторе sort задан блок сортировки, который выполняется в пошаговом режиме для кажДОГО элемента массива iemployees. Поэтому при каждом вводе команды н отладчик будет выполнять цикл до тех пор, пока не будет отсортирован массив (а это

произойдет довольно быстро).


Чтобы повторить предыдущую команду, можно просто нажать клавишу <Enter> в строке приглашения.

Точки останова

Выполнение программы под отладчиком в пошаговом режиме не всегда удобно, например когда программа очень большая. Поэтому для ускорения процесса отладки желательно, чтобы программа на Perl выполнялась в обычном режиме и останавливалась при достижении определенного оператора. Места, в которых программа приостанавливает свое выполнение под отладчиком, называются точками останова.

Перед тем как задать точки останова, нужно определить номера соответствующих операторов программы. Для этого используется команда 1. С ее помощью можно вывести на терминал 10 следующих строк программы. Повторный ввод команды 1 выводит 10 следующих операторов программы и т.д. Чтобы распечатать листинг программы начиная с определенной строки, введите команду 1 fcrpoKn, где вместо параметра строки укажите номер строки. В операторе 1 можно также указать диапазон строк, например 1 3-10.

В листинге текущий оператор, который должен быть выполнен, отмечается символом >, как показано в следующем примере:

DB<3> 1 23-33 23==> gemployees=sort {

24: т/ (SLl, $Fl)=split(, ,$a);

25: ш/ ($L2, $F2)=split{, \$b); .

26: return { SLl OTP $L2 I Сравним фамилии

27 л t Если они идентичны...

28 $F1 cmp $F2 * Тогда сравним имена

29 );

30 } employees;

31

32: foreach(employees) (

33: print efrp($ ];

DB<4>

В данном примере подходящим местом для установки точки останова будет строка 33. Дело в том, что она находится сразу после оператора sort и в ней расположен первый оператор блока основного цикла программы. Точки останова можно задать в



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [ 57 ] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122