|
Раздел отладки
В версии 4.9 задачника Programming Taskbook появились средства,
позволяющие выводить отладочную информацию непосредственно в окно
задачника (в специальный раздел отладки). Необходимость в
подобных дополнительных средствах возникает, прежде всего,
при работе с комплексом Programming Taskbook for MPI
при отладке
параллельных программ, поскольку для них нельзя использовать такие
стандартные средства отладки, как точки останова, пошаговое выполнение
программы и окна просмотра значений переменных. Следует также
отметить, что возможность вывода информации в раздел отладки
позволяет использовать задачник для написания и отладки параллельных
программ, не связанных с выполнением конкретных учебных заданий.
Отладочные средства задачника могут оказаться полезными и для
обычных, непараллельных программ. В этом случае их можно применять в
качестве дополнения к средствам встроенного отладчика.
Раздел отладки представляет собой одну или несколько
многострочных текстовых областей вывода. Он располагается под
основными разделами задачника и выводится на экран только в случае,
если в нем содержится какой-либо текст:
При демонстрационном запуске программы все процедуры, связанные
с разделом отладки, игнорируются, поэтому раздел отладки на экране не
отображается.
Имеется возможность скрыть в окне задачника все его разделы, кроме
раздела отладки; для этого достаточно нажать клавишу пробела или выполнив двойной щелчок
мышью в разделе отладки.
Повторное нажатие пробела или двойной щелчок восстанавливает в окне задачника ранее
скрытые разделы. Для скрытия/отображения основных разделов окна
задачника можно также использовать соответствующую команду
контекстного меню, связанного с разделом отладки. Скрыть все разделы
окна задачника, кроме раздела отладки, можно также программным
способом, вызвав процедуру HideTask.
Прокрутка содержимого раздела отладки может осуществляться с
помощью вертикальной полосы прокрутки, расположенной у его правой
границы. Можно также использовать колесико мыши и клавиатурные
комбинации [Alt]+[Up], [Alt]+[Down] (прокрутка на одну экранную строку),
[Alt]+[PgUp], [Alt]+[PgDn] (прокрутка на 10 экранных строк),
[Alt]+[Home], [Alt]+[End] (прокрутка к первой или последней строке
области вывода).
Предусмотрена возможность изменения размера шрифта,
используемого в разделе отладки. Шрифт может изменяться от 7 до 14
пунктов с шагом 1. Для увеличения шрифта предназначена клавиатурная
комбинация [Alt]+[+], для уменьшения комбинация [Alt]+[].
Соответствующие команды имеются также в контекстном меню раздела
отладки. Информация о текущем размере шрифта сохраняется в файле
результатов и учитывается при последующих запусках программы.
Для «непараллельных» заданий раздел отладки содержит
единственную область вывода. Для заданий по параллельному
программированию число областей вывода равно числу параллельных
процессов, в которых выполнялся отладочный вывод данных, плюс 1;
при этом в каждый момент времени в разделе отладки
отображается одна из областей, а в
нижней части раздела отладки выводится набор ярлычков, позволяющих
переключиться на любую из имеющихся областей вывода:
Ярлычки с номерами (от 0 до N1, где N количество
процессов) позволяют просмотреть содержимое области вывода, связанной
с процессом соответствующего ранга; ярлычок с символом
«*» позволяет просмотреть область вывода, содержащую
объединенный текст всех других областей:
Для переключения на нужную область вывода достаточно щелкнуть
мышью на соответствующем ярлычке. Кроме того, для последовательного
перебора ярлычков слева направо или справа налево можно использовать
комбинации [Alt]+[Right] и [Alt]+[Left] соответственно (перебор
осуществляется циклически). Можно также сразу перейти к нужной
области вывода, нажав соответствующую клавишу: для области
«*» клавишу [*], для областей
«0»«9» цифровые клавиши
[0][9], а для областей «10»«35»
буквенные клавиши от [A] до [Z] (при выполнении
заданий по параллельному программированию максимально возможное
число процессов равно 36).
Если в основных разделах окна задачника отсутствуют
прокручиваемые элементы или основные разделы являются скрытыми, то
дополнительную клавишу [Alt] в перечисленных выше клавиатурных
[Alt]-комбинациях можно не использовать.
Отладочная информация, получаемая из
подчиненных процессов параллельной программы, предварительно
сохраняется в специальных
временных файлах в каталоге учащегося, поэтому она будет доступна для
просмотра, даже если на каком-либо этапе выполнения
программы произойдет зависание некоторых ее подчиненных процессов.
Отладочная информация, получаемая из главного процесса, выводится
непосредственно в раздел отладки.
Количество отладочных строк для каждого процесса не должно
превышать 999; если некоторый процесс пытается вывести данные в
строку с номером, превышающим 999, то в связанной с этим процессом
области отладки выводится сообщение об ошибке, и последующий вывод
отладочных данных для этого процесса блокируется. Указанное
ограничение позволяет, в частности, избежать проблем, возникающих при
«бесконечном» выводе отладочной информации из какого-либо
зациклившегося подчиненного процесса во временный файл.
Каждая экранная строка, отображаемая в разделе отладки, состоит из
служебной области и области данных. Ширина служебной области равна 6 экранным позициям
для «непараллельных» заданий и 9 позициям для заданий по параллельному программированию. Ширина
области данных равна 80 позициям.
Служебная область состоит из следующих частей (см. рисунки,
приведенные выше):
- область нумерации процессов (только для заданий по
параллельному программированию): 2 экранные позиции,
отводимые для ранга процесса, и символ «|»;
- область нумерации строк: 3 экранные позиции, отводимые
для номера строки данных, после которых следует символ
«>» и символ пробела;
- область признака сообщения об ошибке: одна экранная
позиция, в которой может содержаться либо пробел (признак
обычного отладочного текста), либо символ «!»
(признак сообщения об ошибке).
Если в разделе отладки выводится текст, связанный со всеми
процессами параллельного приложения (этот текст связан с ярлычком
«*»), то нумерация строк для каждого процесса производится
независимо.
При переключении между областями вывода, связанными с
различными процессами параллельного приложения, сохраняется номер
первой отображаемой строки (за исключением ситуации, когда в новой
области вывода отсутствует строка с требуемым номером; в этом случае в
новой области вывод осуществляется, начиная с первой строки данных).
Отмеченная особенность позволяет быстро просмотреть (и сравнить) один
и тот же фрагмент отладочных данных для различных процессов.
Содержимое области вывода, отображаемой в разделе отладки, можно
копировать в буфер Windows; для этого предназначена стандартная
клавиатурная комбинация [Ctrl]+[C] и соответствующая команда
контекстного меню раздела отладки.
Для вывода данных в раздел отладки предназначены процедуры Show и ShowLine.
Описания этих процедур приводятся в разделах, посвященных использованию задачника для языков
Pascal,
C++, C#, Visual Basic .NET, F#,
Python, Java, Ruby и Julia.
Возможность использования раздела отладки сохранена и в появившемся в версии 4.11
режиме окна с динамической компоновкой. Как и в окне с фиксированной компоновкой,
раздел отладки отображается ниже разделов с заданием, однако в данном случае
для всех разделов окна используется общая полоса прокрутки. В окне с динамической
компоновкой доступны почти все описанные выше действия по управлению разделом отладки,
в частности, настройка размера шрифта в разделе отладки, копирование содержимого раздела отладки
в буфер Windows, скрытие разделов окна с заданием.
Начиная с версии 4.13, в режиме с динамической компоновкой реализована возможность
просмотра областей вывода, связанных с отдельными процессами параллельной программы.
Для выбора нужной области вывода можно использовать те же клавиши, что и в режиме с фиксированной компоновкой
([Left], [Right], [*], [0][9], [A][Z]),
а также набор меток, расположенных в левом нижнем углу раздела отладки (метка, связанная с выбранной областью,
имеет темно-серый фон):
Начиная с версии 4.14, в разделе отладки может отображаться
дополнительная информация, связанная с заданием и содержащаяся в файле
дополнений для данной группы заданий. Если при этом программа
осуществляет отладочную печать, то для информации, полученной из файла дополнений,
и для данных, выведенных программой, используются разные области вывода, помеченные
метками «!» и «*» соответственно.
|