Как выполнить программу по шагам

фрагментам. Выбор команды Run|Step Over или нажатие клавиши F8 вызывает выполнение отладчиком всего кода в операторе, указанном строкой выполнения, включая любые вызываемые на ней процедуры или функции, пока управление не вернется обратно к программисту. После этого строка выполнения указывает следующий выполняемый оператор.

Для примера возьмем следующую программу:

Program StepTest;

function Negate(X: Integer): Integer;

Begin

Negate := -X;

End;

Var

I: Integer;

Begin

for I := 1 to 10 do Writeln(Negate(I));

End.

Пример 1 Простая программа, выполняемая по шагам.

Если нажать клавишу F8, то строка выполнения перемещается на оператор begin в начале основного цикла, поскольку это первое, что выполняется в программе. Второе нажатие клавиши F8 выполняет begin и перемещает строку выполнения вниз до оператора for на следующей строке. После этого нажатие F8 вызывает выполнение всего цикла for на экран пользователя выводятся числа от -1 до -10, а строка выполнения перемещается к end.

PYCHARM ДЛЯ PYTHON. 2 ЧАСТЬ. DEBUGGER

Хотя функция Negate вызывается 10 раз, строка выполнения никогда на нее не перемещается. Выполнение по шагам позволяет отладчику не показывать детали любых вызовов для отдельной строки.

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

Если необходимо видеть подробности цикла, то в пример нужно внести следующее простое изменение:

Begin

for I := 1 to 10 do

Источник: ronl.org

Выполнение программы по шагам

фрагментам. Выбор команды Run|Step Over или нажатие клавиши F8 вызывает выполнение отладчиком всего кода в операторе, указанном строкой выполнения, включая любые вызываемые на ней процедуры или функции, пока управление не вернется обратно к программисту. После этого строка выполнения указывает следующий выполняемый оператор.

Возьмем следующий пример программы:

function Negate(X: Integer): Integer;

for I:= 1 to 10 do Writeln(Negate(I));

Пример 1 Простая программа, выполняемая по шагам.

Если нажать клавишу F8, то строка выполнения перемещается на оператор begin в начале основного цикла, поскольку это первое, что выполняется в программе. Второе нажатие клавиши F8 выполняет begin и перемещает строку выполнения вниз до оператора for на следующей строке. После этого нажатие F8 вызывает выполнение всего цикла for; на экран пользователя выводятся числа от -1 до -10, а строка выполнения перемещается к end.

Хотя функция Negate вызывается 10 раз, строка выполнения никогда на нее не перемещается. Выполнение по шагам позволяет отладчику не показывать детали любых вызовов для отдельной строки.

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

Если необходимо видеть подробности цикла, то в пример нужно внести следующее простое изменение:

Как измерить время выполнения кода | Изучение С++ для начинающих. Урок #145

for I:= 1 to 10 do

Пример 2 Изменение формата кода для лучшего выполнения

Если теперь нажимать клавишу F8, то строка выполнения будет при выполнении цикла 10 раз возвращаться на Writeln.

2.6 Трассировка программы

Трассировка программы во многом аналогичная ее выполнению по шагам. Единственное исключение состоит в том, что когда встречается оператор вызова процедуры или функции, при трассировке эти процедуры и функции также выполняются по шагам, а при простом выполнении по шагам управление возвращается программисту после завершения выполнения подпрограммы.

Например, чтобы выполнить трассировку кода в Примере 1, необходимо выбрать команду Run|Trace Into или нажать клавишу F7. Первое нажатие на F7 передает управление на оператор begin основной программы. Повторное нажатие F7 снова перемещает строку управления на оператор for. После этого нажатие клавиши F7 трассирует вызов функции Negate — строка выполнения перемещается на оператор begin в блоке функции. Если продолжать нажимать F7, строка выполнения перемещается по функции, а затем, когда дойдет до оператора end, возвращается к оператору вызова.

Формат программы влияет на поведение строки выполнения при трассировке, хотя и не в такой степени как при пошаговом выполнении. Если код сформатирован как в Примере 1, то трассировка оператора for приводит к выполнению 10 раз функции Negate. Если разбить оператор for на две строки, как в Примере 2, то трассировка оператора end функции возвращает строку выполнения ту строку основной программы, которая будет выполняться следующей.

Первые девять раз это снова будет вызов функции. В десятый раз строка выполнения перемещается на оператор end программы.

2.7 Выполнение больших фрагментов

Иногда, конечно, нежелательно выполнять по шагам всю программу только для того, чтобы добраться до того места, где возникает проблема. Отладчик позволяет выполнить сразу большой фрагмент программы до той точки, где необходимо начать выполнение по шагам.

Читайте также:
Можно ли одному объекту назначить несколько эффектов анимации в программе powerpoint

Чтобы задать в программе точку, до которой программист хочет ее выполнить, а затем остановиться, нужно использовать команду Run|Go To Cursor (Выполнение| Выполнение до курсора) или клавишу F4. (То есть программист сообщает отладчику, что не хочет выполнять программу по шагам, пока не достигнет заданной точки.) Для этого необходимо установить курсор на той строке, где нужно возобновить управление отладкой, затем нажать клавишу F4. Причем, это можно сделать как в начале сеанса отладки, так и когда уже часть программ мы выполнена по шагам или протрассирована.

2.8 Повторное выполнение

В ходе сеанса отладки иногда желательно начать все сначала. Выбор команды Run|Reset Program или нажатие клавиши Ctrl+F2 приведет к полному сбросу, так что выполнение по шагам, или трассировка начнется в начале основной программы.

2.9 Отслеживание вывода программы

При пошаговом выполнении часто полезно просмотреть вывод программы, называемый экраном пользователя. Turbo Pascal предоставляет несколько способов просмотра экрана пользователя.

2.9.1 Переключение экранов

В любой момент сеанса отладки можно выполнять переключение экрана IDE и экрана пользователя. Чтобы вывести экран пользователя, необходимо нажать клавиши Alt+F5. Для возврата в IDE нажать любую клавишу.

2.9.2 Окно Output

IDE предусматривает для экрана пользователя окно, которое называется окном вывода. Выбор команды меню Debug|Output открывает (выводит на переднем плане) активное окно, содержащее вывод программы.

2.10 Просмотр значений

Выполнение программы по шагам или ее трассировка могут помочь найти ошибки в алгоритме программы, но обычно желательно также знать, что происходит на каждом шаге со значениями отдельных переменных. Например, при выполнении по шагам цикла for полезно знать значение переменной цикла. IDE имеет два инструментальных средства для проверки содержимого переменных программы: окно Watches (Просмотр) и диалоговое окно Evaluate and Modify (Вычисление и модификация).

Источник: megalektsii.ru

Выполнение программы

Системы IBM/360 или 370 обслуживают сотни пользователей ежедневно. Каждый пользователь может предложить несколько заданий, требующих различных средств ввода-вывода, компиляторов с различных языков и иных ресурсов. Во многих системах обработка всех этих заданий выполняется с использованием мультипрограммирования, т.е. такой организации вычислений, когда несколько заданий могут обслуживаться одновременно. Вследствие чрезвычайной сложности подобной системы управление ею никак не может быть непосредственно возложено на человека. Помощь человеку в выполнении этой задачи оказывает специальный набор программ, называемый операционной системой, осуществляющей управление ресурсами ЭВМ на протяжении выполнения программ пользователей.

На операционную систему возложено много важных задач, в том числе управление операциями ввода-вывода, управление очередями заданий или шагов каждого задания, распределение вычислительных ресурсов, таких, как память, время процессора, периферийные устройства, между конкурирующими пользователями. Операционная система также осуществляет защиту от непредусмотренного влияния программ пользователей друг на друга, управление операциями ввода-вывода и управление данными. Пользователи, таким образом, освобождаются от необходимости решения всех перечисленных задач.

Существуют три наиболее известные операционные системы для IBM 360 и 370. Ими являются, в порядке возрастания сложности, Дисковая операционная система (DOS), Операционная система (OS) и виртуальные системы (DOS/VSи OS/VS).

Целесообразность использования какой-либо из этих систем на конкретной установке зависит от размеров вычислительной системы, количества и типов различных периферийных устройств и режима работы установки. В ЭВМ, имеющих относительно небольшую память, оснащенных небольшим количеством внешних устройств и использующихся преимущественно для решения экономических задач, в большинстве случаев применяется Дисковая операционная система. Мощные вычислительные системы общего назначения использующиеся, например, на вычислительных центрах университетов для выполнения административно-учетных работ, для обеспечения учебного процесса и для проведения исследовательских работ, работают с более развитой Операционной системой. Установки, аппаратура которых предусматривает работу с виртуальной памятью, оснащены виртуальными системами.

При организации заказов на требуемые работы в виде заданий связь с операционной системой осуществляется на языке управления заданиями, который специально предназначен для этой цели. Предложения языка управления заданиями совместно с программой и необходимыми данными составляют «заказ» на использование ресурсов вычислительной системы. Заказы обслуживаются операционной системой в порядке, обеспечивающем, во-первых, правильное прохождение каждого задания в отдельности, а во-вторых, оптимальное использование вычислительной системы в целом.

Шаги задания

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

Первым шагом является шаг ассемблирования, на котором ассемблер преобразует исходную программу в программу на машинном языке При этом, очевидно, центральный процессор выполняет программу- ассемблер. Ассемблер, для которого наша программа, или исходный модуль, является входными данными, заменяет мнемонические обозначения машинных операций на коды, символические имена на соответствующие адреса и, если того требует программа, резервирует память для размещения обрабатываемых данных. В результате обработки исходного модуля ассемблером получается объектный модуль, который представляет собой нашу программу на машинном языке.

Читайте также:
Как активировать программу vuescan

Большинство программ в своей работе используют результаты, получаемые другими программами. Например, выполнение операций ввода-вывода обычно возлагается на подпрограммы, представляющие собой отдельные законченные программы, что облегчает задачу программиста. Кроме того, программе в ее работе может требоваться информация, не содержащаяся непосредственно в данной программе. Вторым шагом обработки задания является шаг редактирования связей, на котором основная программа, все требуемые подпрограммы и данные поступают на вход так называемой программы-редактора связей, которая объединяет их в форме загрузочного модуля. Для выполнения помещенного в память загрузочного модуля требуется лишь помощь со стороны операционной системы.

Рис. 5.11. Обработка программы на языке ассемблера.

Третий шаг включает в себя последнюю подготовку загрузочного модуля к выполнению и само выполнение программы. Загрузочный модуль помещается в основную память, между ним и операционной системой устанавливаются необходимые связи, и на него, находящегося теперь в форме, допускающей выполнение, наконец, передается управление.

На рис. 5.11 схематически изображены три шага обработки программы на языке ассемблера. Отметим, что те же самые шаги требуются для выполнения программы, написанной на любом другом языке. Разница заключается лишь в программе, производящей трансляцию исходной программы на машинный язык.

Для обработки программы, написанной на языке ФОРТРАН например, на первом шаге используется компилятор с ФОРТРАНа. Остальные шаги, выполняемые при обработке такой программы, те же.

Альтернативой трехшаговому выполнению задания является использование программы загрузчик. Шаги редактирования связей и выполнения в этом случае объединяются в один. Не производится создание отдельного загрузочного модуля, объектный модуль и соответствующие подпрограммы загружаются непосредственно в память, производится редактирование связей, и программа выполняется. В целом использование загрузчика напоминает рассмотренную трехшаговую схему.

Рассмотрим теперь предложения языка управления заданиями, необходимые для организации приведенной выше процедуры обработки программы на языке ассемблера операционной системой. Правила составления предложений языка управления заданиями могут варьироваться в зависимости от реально используемых устройств и местных соглашений.

Управление заданиями в системах OS и OS/VS

Пока разница между OSи OS/VS для нас несущественна. Предложения языка управления заданиями, описываемые ниже, играют одинаковую роль в обеих системах.

Предложения этого языка, так же как и остальная входная информация, набиваются на карты и отличаются тем, что начинаются с двух характерных символов (//). Формат предложений совпадает с форматом предложений языка ассемблера, только начало их, очевидно, соответствует третьему, а не первому столбцу. Итак, первым полем является поле имени.

Если имя указывается, то оно должно начинаться с третьего столбца, в противном случае этот столбец остается пустым. Затем следуют соответственно поле операции, поле операндов и поле комментария. Как и в предложениях языка ассемблера, каждое поле отделяется от соседних по меньшей мере одним пробелом.

Первым предложением любого задания является предложение JOB, которое имеет следующий формат:

// имя задания JOBучетная информация и возможности по выбору

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

Информация, указываемая в поле операндов предложения JOB, в значительной степени зависит от конкретной системы. Вы будете информированы о требованиях системы вашего вычислительного центра. Обычно в этом поле идентифицируется заказчик, например с помощью наименования отдела и шифра темы, требуемые объем памяти и количество машинного времени, характеристика объема выдаваемой программой информации и некоторые другие сведения о задании в целом, такие, например, как тип бумаги, необходимой для распечатки всей выводимой заданием информации.

Следующей картой задания является карта ЕХЕС. Формат этого предложения таков:

// имя шага EXECASMFCLG

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

ЕХЕС — это сокращение от слова EXECute(выполнить). Операндом в данном случае является имя программы на языке управления заданиями, или каталогизированной процедуры, которая должна быть выполнена. Каталогизированная процедура — это последовательность предложений языка управления заданиями, хранящаяся в системной библиотеке. Написав ЕХЕС-предложение с указанным операндом, мы запросили таким образом включение каталогизированной процедуры в наше задание.

Читайте также:
Какие фирмы занимаются охраной безопасности программ

Использование каталогизированной процедуры устраняет необходимость непосредственного указания содержащихся в ней предложений. Процедура ASMFCLGсодержит предложения, запрашивающие выполнения ассемблирования, редактирования связей и выполнения программы. От нас требуется только указание источников входных данных для ассемблера и нашей программы, а также место вывода выходной информации. Имя ASMFCLGможет быть проинтерпретировано как «Использовать ассемблер F, Compile(компилировать), Link-edit(редактировать связи) и GO(выполнить)». Можно запро-

сить распечатку процедуры ASMFCLG. Вы получите ее после выполнения всего задания, каждое предложение процедуры будет при этом предваряться комбинацией символов XX.

Остальные предложения языка управления заданиями называются предложениями определения наборов данных (DataDefinition— DD- предложения). Эти предложения содержат сведения об источниках вводимой информации и размещении получаемых результатов. Исходная программа, являющаяся входными данными ассемблера, следует за предложением вида

Ассемблер рассматривает информацию, следующую за DD-предложением с именем ASM.SYSIN, как исходную программу. Звездочка (*) означает, что далее следует программа, отперфорированная на картах. За предложением ENDпрограммы на языке ассемблера следует карта-ограничитель

которая идентифицирует конец вводимых данных.

Следующая карта информирует систему о необходимом размещении получаемых результатов. Например, карта с предложением

требует от системы выдать все результаты, которые будут получены на шаге GO, на стандартное устройство вывода, которым обычно является устройство печати.

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

// GO.SYSIN DD SYSOUT=A

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

Наконец, необходимо с помощью карт управления заданиями указать источник входных данных самой выполняемой программы. В качестве таких данных рассматривается информация, помещенная после карты

После последней карты данных должна следовать карта-ограничитель

За этой картой обычно следует карта

идентифицирующая конец задания.

// CSC52R56 JOB(100 ,1105) ,’ 10055 W. RUDD’

// COMPUTE EXEC ASMFCLG

ASSEMBLY LANGUAGE SOURCE PRCGRAM GOES HERE

END PROGRAM, END STATEMENT OF PROGRAM

//GO.SYSPRINT DD SYSOUT=A

//GO.SYSUDUNP DD SYSOUT = A (OPTIONAL)

DATA CAROS GO HERE

Рис. 5.12. Структура задания для операционных систем OSили OS/VS.

На рис. 5.12 приведен пример оформления исходной программы, данных и предложений языка управления заданиями в единое задание, подлежащее обработке стандартной системой OS. Необходимо иметь в виду, что каждый конкретный вычислительный центр может требовать выполнения своих условий относительно форм указания имен заданий, учетной информации и т. д. Тем не менее описанная структура в основном является универсальной.

Управление заданиями в системах DOS и OS/VS

Предложения языка управления заданиями Дисковой операционной системы начинаются с двух символов / в первом и втором столбцах, третий столбец обязательно содержит пробел. Затем следуют поля операции и операндов, информация в которых указывается в том же формате, что и в языке ассемблера.

Первым предложением в любом задании, подготовленном для обработки системой DOS, является предложение JOB:

// JOB имя задания

Это предложение идентифицирует начало задания, а также присваивает заданию имя, указываемое в поле операндов. Имя задания, вообще говоря, может быть любым допустимым в языке ассемблера, однако каждый конкретный вычислительный центр может потребовать выполнения специальных соглашений относительно формы записи имен.

Следующей картой является карта

В поле операндов здесь задаются возможности по выбору, которые будут использоваться при обработке этого конкретного задания операционной системой. Например, если мы хотим иметь распечатку (LIST— листинг) исходной программы на языке ассемблера, после ассемблирования провести редактирование связей (LINK-edition) и в случае прерывания выполнения программы из-за ошибки иметь распечатку полного дампа, то следует написать:

На конкретных вычислительных центрах могут быть свои правила определения вариантов обработки задания, кроме того, может потребоваться включение предложений ASSGNдля указания конкретных устройств ввода-вывода, с которым будет работать программа. Следующая карта является картой запроса ассемблирования:,

За этим предложением следует сама исходная программа на языке ассемблера. За последним предложением программы (обычно предложением END) следует специальная карта-ограничитель, отмечающая конец входной информации для ассемблера:

Затем следуют предложения, запрашивающие выполнение редактирования связей

ASSEMBLY LANGUAGE SOURCE PROGRAM GOES HE TO

INPUT CARD DATA GOES HERE

Рис. 5.13. Структура задания для операционной системы DOS.

//CSC 52R56 JOB (100,1105),’10055W. RUDD’

//COMPUTE EXEC ASMFCLG

AVERAGE START 0

START OF PROGRAM

DO NOT PRINT MACRO EXPANSIONS

BEGIN EXECUTION HERE

READ NUMBER OF NUMBERS TO USE

KEEP A COPY IN REGISTER 10

Источник: itteach.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru