Отлаживать параллельную программу, выполняющуюся на многопроцессорном комплексе, значительно труднее, чем отлаживать последовательную программу, работающую на одном процессоре.
Символьные отладчики языков высокого уровня для традиционных однопроцессорных компьютеров позволяют отлаживать программы, останавливая их выполнение в позиции ошибки или точки останова. В точке останова можно исследовать и изменять значения переменных, доступных из текущей позиции. Это глобальные переменные или переменные функций/блоков, объемлющих текущую позицию (переменные, доступные по статической цепочке). Кроме того, переходя (по динамической цепочке вызовов функций) от вызванной функции к вызвавшей функции, можно исследовать как собственные переменные функции, так и переменные, видимые по их статическим цепочкам. Тексты всех функций можно просмотреть, можно расставлять в них новые точки останова.
В параллельной программе ситуация с отладкой значительно сложнее. Программа состоит из множества параллельных и квазипараллельных процессов. Для каждого процесса имеет место своя динамическая цепочка с соответствующими статическими цепочками. В точке останова останавливаются лишь некоторые из процессов, остальные продолжают работу. Поэтому у последних нельзя менять значения переменных, а считываемая информация о состоянии транспьютера относится к уже прошедшему времени.
Пакет INMOS toolset предоставляет символьный отладчик idebug для анализа и отладки транспьютерных программ. Отладчик idebug загружается в головной транспьютер сети, а отлаживаемая параллельная программа - в остальные транспьютеры сети.
Отладчик имеет команды, позволяющие проанализировать процессы и процессоры в сети. Можно просмотреть списки процессов, ожидающих выполнение (run queues), таймер (timer queues), обмена данными по линиям связи (links). Команды, показывающие содержимое списков процессов, для каждого процесса выводят на экран пары значений регистров Iptr и Wdesc, называемые дескрипторами процессов.
Можно "выделить" из какого-нибудь списка интересующий вас процесс. Выделенный процесс можно локализовать - локализовать исходный текст, соответствующий этому процессу. Базовым пунктом понятия локализации является адрес ячейки памяти (значение Iptr). Поэтому, говоря о локализации функции-процесса, подразумевается выделение из общего ряда некоторой позиции в функции-процессе. По адресу и карте памяти программы, построенной редактором связей, отладчик узнает код, какого объектного модуля располагается в области памяти этой ячейкой. Из объектного модуля он извлекает информация об имени исходного файла программы и номер строки, соответствующий адресу ячейки. Значение регистра Wdesc позволяет узнать адрес рабочей области процесса и его приоритет.
Локализовать можно функции
как выполнявшихся, так и выполняющихся процессов. Однако не у
каждой локализованной функции можно исследовать и/или изменять
значения переменных, поскольку можно локализовать функцию, не
входящую в динамическую цепочку вызовов или принадлежащую процессу,
закончившему выполнение.
Отладчик idebug можно использовать для:
Отладчик имеет два режима взаимодействия с программой: