home   contents  previous      next        up

Интерактивная отладка

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

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

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

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

Задание начальных точек останова.

После загрузки программы до ее старта можно расставить точки останова.

Начать/продолжить выполнение программы.

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

Исследование и модификация переменных.

Команда Inspect позволяет посмотреть значения видимых локальных и глобальных переменных. Имя переменной, е§ компоненты либо вводится на приглашение команды, либо указывается курсором перед выполнением этой команды. Команда Modify дает возможность изменить значения доступных переменных.

Исследование стека вызова функций.

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

"Переход" к другому процессу.

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

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

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


home   contents  previous      next        up