Отладка программ в OpenMP
Отладка многопоточных программ с помощью отладчика TotalView
Наличие современных автоматизированных средств отладки многопоточных программ не устраняет необходимости использования в процессе разработки и обычных средств отладки - сервисных программ-отладчиков. Однако стандартные отладчики ddd, idb и т. п. не очень удобны для многопоточных приложений, поскольку разрабатывались в основном для приложений однопоточных. На рынке системного программного обеспечения существуют и специальные отладчики, предназначенные для отладки многопоточных приложений. К ним как раз и относится отладчик TotalView, разрабатываемый и поддерживаемый компанией Etnus. Он ориентирован в первую очередь на анализ и настройку многопоточных параллельных программ. Отладчик TotalView - коммерческий продукт, и для работы с ним нужно приобрести лицензию. Однако существует и его бесплатная учебная версия, позволяющая отлаживать параллельные программы, в которых реализуется до 8 параллельных потоков. Далее подробнее остановимся на возможностях этого отладчика.
После запуска отладчика из командной строки операционной системы Linux на экране компьютера появляется основное окно программы, изображенное на рис.5.9.
Загрузить программу для отладки можно в меню File. После загрузки можно начать отладку, например, воспользовавшись командой Step, которую можно найти на второй сверху панели инструментов. Кроме того, можно в окне просмотра текста программы установить курсор на нужную строку и нажать на кнопку Run To на панели инструментов отладчика TotalView. В результате программа выполнится до той строки, на которой установлен курсор. Еще один способ запуска программы под управлением отладчика состоит в расстановке точек прерывания (Break Points). Для установки точки прерывания надо щелкнуть левой кнопкой мыши на номере строки в окне просмотра программы. В результате в окне просмотра вместо номера строки появится желтая стрелка на красном фоне (обозначение точки прерывания). Действуя аналогичным образом, можно расставить точки прерывания по всей отлаживаемой программе. Затем, нажимая на кнопку Go на панели инструментов, можно пройти по всей программе с остановками в точках прерывания.
Отметим, что в этом диалоговом окне можно определять не только функции, но и любые вычисления с переменными программы, определенными в точке активности. При этом в диалоговом окне надо задать алгоритмический язык, на котором написана программа, нажав соответствующую кнопку выбора (Check Box), а также активировать кнопку Evaluate.
Просматривать значения переменных в точке прерывания можно в окнах Stack Trace и Stack Frame в основном окне отладчика, изображенном на рис.5.10. В нижнем фрагменте этого окна есть возможности для идентификации параллельного потока, в котором просматриваются переменные, а также средства перелистывания потоков. Щелчки левой кнопки мыши на данных в окне Stack Frame инициируют открытие всплывающих окон со значениями исследуемых переменных отлаживаемой программы, как показано на рис.5.11.
Отметим, что просматривать переменные в TotalView можно не только в числовом виде, как показано на рис.5.11, но и в графическом. Пример просмотра элементов массива в графическом виде изображен на рис.5.12.
При запуске многопоточной программы под управлением отладчика TotalView на экране появляется корневое окно (Root Window) с иерархической информацией по всем запущенным и запускаемым в процессе работы процессам. Вид этого окна представлен на рис.5.13. Все процессы можно разделить на две большие группы: локальные (local) и удаленные (remote). Локальные процессы - это процессы, запущенные на том же процессоре, на котором запущен и сам отладчик. Удаленные процессы запущены на других процессорах. Для отладчика, в принципе, безразлично, какие процессы просматриваются: удаленные или локальные. Программа в основном окне просмотра выводит информацию о них в единообразном виде. Достаточно просто выбрать процесс, как показано на рис.5.13.
В заключение отметим, что более подробно с возможностями отладчика TotalView можно познакомиться, воспользовавшись его документацией.