ОТЛА́ДКА ПРОГРА́ММЫ
-
Рубрика: Технологии и техника
-
Скопировать библиографическую ссылку:
ОТЛА́ДКА ПРОГРА́ММЫ, процесс поиска, локализации и исправления ошибок в компьютерной программе. На всех этапах разработки программного обеспечения О. п. тесно связана с тестированием программ. В процессе тестирования (напр., с использованием спец. подобранных наборов исходных данных) могут достигаться такие состояния программы, в которых фиксируются расхождения с заданными спецификациями. О. п. обеспечивает поиск причин этих расхождений (локализацию ошибок) и соответствующую корректировку программы. В процессе трансляции (см. Транслятор) и выполнения программы (которая реализует некоторую функцию) компьютер, используя свои аппаратно-программные ресурсы, доопределяет (напр., вызывает из библиотеки стандартные подпрограммы) частично определённую программой функцию до т. н. тотально определённой. Т. о. судить о правильности или неправильности результатов выполнения программы можно только сравнивая заданную спецификацию функции с результатами её вычислений, что и осуществляется в процессах тестирования и отладки.
Методы отладки программ
Методы О. п. для последовательных и параллельных вычислит. процессов существенно различаются. Для последовательных процессов характерна повторяемость результатов при выполнении программы с одними и теми же исходными данными. Поэтому для отслеживания и контроля состояний вычислит. процесса при их отладке применяют О. п.: ручную, пошаговую, О. п. по предварительно заданным т. н. точкам останова и др. При ручной О. п. (desk checking) анализ состояния вычислит. процесса (используя исходные данные, при работе с которыми была обнаружена ошибка) выполняет непосредственно разработчик на основании своего опыта, знаний и интуиции. В процессе пошаговой О. п. (single-step operation) состояние вычислит. процесса анализируют после выполнения каждого оператора (команды) программы. О. п. по предварительно заданным точкам останова программы (breakpoints – меткам операторов) позволяет после выполнения заданного заранее множества операторов приостановить на время выполнение программы, напр. для просмотра состояний выбранных параметров. Проводят также анализ зафиксированных состояний выделенных областей памяти (dump) отлаживаемого процесса и его программно-аппаратного окружения. При О. п. обратного выполнения (reversible execution) осуществляют анализ вычислит. процесса начиная с состояния, в котором зафиксирована ошибка, и заканчивая состоянием, идентифицируемым как причина ошибки. Трассировка (tracing) предоставляет для анализа информацию о поведении программы, которая содержит в т. ч. данные о потоке управления, т. е. последовательности событий (путей) в процессе выполнения программы. Информация, необходимая для анализа О. п., как правило, собирается автоматически в процессе тестирования О. п. и сохраняется в файле спец. формата (Log – журнал). Состав и структура сохраняемой в журнале информации определяется разработчиком заранее. Для сбора информации об О. п. часто применяют т. н. инструментацию отлаживаемой программы, т. е. преобразование исходной программы в функционально эквивалентную, которая в заданных точках расширена операторами, фиксирующими выбранное подмножество состояний вычислит. процесса. Инструментация программы не нарушает результатов вычислений отлаживаемого процесса, но влияет на время его выполнения. Для О. п. последоват. процессов с недетерминированным окружением следует создавать спец. условия (напр., спец. множества тестов – тестовые наборы), позволяющие учитывать все варианты недетерминированных взаимодействий отлаживаемой программы с программно-аппаратным окружением.
При О. п. параллельных процессов следует учитывать, что порядок выполнения операторов (команд) каждого из процессов при параллельных вычислениях сохраняется, однако порядок выполнения операторов разных процессов недетерминирован (свойство интерливинга), что может привести к получению разных результатов выполнения параллельных процессов (на одном и том же наборе данных). Если параллельные процессы независимы, т. е. совместно не используют общих переменных и иных общих ресурсов, а также не обмениваются сообщениями, то их отладка может быть сведена к отладке нескольких параллельных процессов. Если вышеперечисленные условия не выполняются, то в процессе О. п. необходимо локализовать и проанализировать точки (области) параллельных вычислит. процессов, в которых сосредоточено их взаимовлияние; чаще всего в этих точках процесс выполнения операторов разных процессов необходимо упорядочить (синхронизовать). Т. е. в программы процессов следует внести такие изменения, которые гарантируют при исполнении программ независимый (инвариантный) от интерливинга результат вычислений.
При отладке параллельных программ обычно применяют следующие методы. Анализ выполнения параллельных процессов на предмет возникновения недопустимой ситуации – одновременного доступа к общему ресурсу нескольких процессов, и обеспечение условий, исключающих данную ситуацию. Локализация точек изменения общего ресурса одним из параллельных процессов, анализ влияния этих изменений на др. параллельные процессы, а также обеспечение синхронизации процессов в локализованных точках. Локализация и анализ точек недетерминированного взаимодействия параллельных процессов и создание спец. условий (напр., спец. тестовые наборы), позволяющих учитывать все варианты недетерминированных взаимодействий. Результатом корректировки программы в процессе отладки может являться не только исправление найденных ошибок, но и внесение в программу новых ошибок (т. н. индуцированных ошибок), что приводит к повторному циклу тестирования и отладке программ.
Инструменты для отладки программ
Разработаны спец. программные средства (инструменты) для проведения О. п., среди которых наиболее популярны т. н. отладчики. Они имеют удобный пользовательский интерфейс, позволяют проводить О. п. пошагово и с предварительно заданными (заказанными) точками останова, просматривать и изменять состояние выделенной области памяти, контролировать разл. информацию на этапе выполнения. Отладчики часто интегрированы в систему разработки кода программ (напр., Eclipse CDT, MS Visual Studio). Широко используются инструменты динамич. и статич. анализа. Динамические анализаторы (напр., Valgrind) контролируют время выполнения участков кода программы, находят точки (области) некорректной работы с памятью и объектами операционной системы и др. Статические анализаторы (напр., Klocwork) выявляют ошибки выхода (обращения) за границы массивов, потенциальные проблемы безопасности, т. н. утечки памяти, некорректность использования системных ресурсов и др. Популярны также сканеры интерфейсов (напр., Wireshark, позволяющий осуществлять сетевой мониторинг). Однако для анализа типичных ошибок параллельных или многопоточных приложений, напр. т. н. гонки данных, тупиков (взаимной блокировки процессов), потоков в состоянии ожидания, потерянных сигналов, требуются специализир. средства отладки параллельных приложений (напр., Intel Thread Checker). Следует отметить, что наиболее эффективно комплексное применение инструментов О. п., поскольку конкретные программные средства обеспечивают поиск лишь определённых типов ошибок.