Отладчик

Компьютерная программа, используемая для тестирования и отладки других программ.
Winpdb отлаживает сам себя

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

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

« Ловушка » происходит, когда программа не может нормально продолжать работу из-за ошибки программирования или недопустимых данных. Например, программа могла попытаться использовать инструкцию, недоступную в текущей версии ЦП , или попытаться получить доступ к недоступной или защищенной памяти . Когда программа «ловит» или достигает предустановленного состояния, отладчик обычно показывает местоположение в исходном коде, если это отладчик исходного уровня или символический отладчик , который теперь часто встречается в интегрированных средах разработки . Если это отладчик низкого уровня или отладчик машинного языка, он показывает строку в дизассемблированном коде (если только он также не имеет онлайн-доступа к исходному коду и не может отобразить соответствующий раздел кода из сборки или компиляции).

Функции

Обычно отладчики предлагают процессор запросов, распознаватель символов, интерпретатор выражений и интерфейс поддержки отладки на верхнем уровне. [1] Отладчики также предлагают более сложные функции, такие как пошаговый запуск программы ( пошаговый запуск или анимация программы ), остановка ( прерывание ) (приостановка программы для проверки текущего состояния) при некотором событии или указанной инструкции с помощью точки останова и отслеживание значений переменных. [2] Некоторые отладчики имеют возможность изменять состояние программы во время ее работы. Также может быть возможным продолжить выполнение в другом месте программы, чтобы обойти сбой или логическую ошибку.

Та же функциональность, которая делает отладчик полезным для исправления ошибок, позволяет использовать его в качестве инструмента взлома программного обеспечения для обхода защиты от копирования , управления цифровыми правами и других функций защиты программного обеспечения. Это часто также делает его полезным в качестве общего инструмента проверки, покрытия неисправностей и анализатора производительности , особенно если отображаются длины путей инструкций . [3] Ранние микрокомпьютеры с дисковым хранилищем часто выигрывали от возможности диагностировать и восстанавливать поврежденные записи данных каталога или реестра, «восстанавливать» файлы, помеченные как удаленные, или взламывать защиту файлов паролем.

Большинство основных отладочных движков, таких как gdb и dbx , предоставляют консольные интерфейсы командной строки . Отладочные фронтенды являются популярными расширениями отладочных движков, которые обеспечивают интеграцию с IDE , анимацию программ и функции визуализации.

Запись и воспроизведение отладки

Отладка записи и воспроизведения [4], также известная как «запись полета программного обеспечения» или «запись выполнения программы», фиксирует изменения состояния приложения и сохраняет их на диске по мере выполнения каждой инструкции в программе. Затем запись можно воспроизводить снова и снова и интерактивно отлаживать для диагностики и устранения дефектов. Отладка записи и воспроизведения очень полезна для удаленной отладки и устранения прерывистых, недетерминированных и других трудновоспроизводимых дефектов.

Обратная отладка

Некоторые отладчики включают функцию, называемую « обратной отладкой », также известную как «историческая отладка» или «обратная отладка». Эти отладчики позволяют шаг за шагом возвращаться к выполнению программы во времени. Различные отладчики включают эту функцию. Microsoft Visual Studio (2010 Ultimate edition, 2012 Ultimate, 2013 Ultimate и 2015 Enterprise edition) предлагает обратную отладку IntelliTrace для C#, Visual Basic .NET и некоторых других языков, но не для C++. Обратные отладчики также существуют для C, C++, Java, Python, Perl и других языков. Некоторые из них имеют открытый исходный код, некоторые являются проприетарным коммерческим программным обеспечением. Некоторые обратные отладчики замедляют цель на порядки, но лучшие обратные отладчики вызывают замедление в 2 раза или меньше. Обратная отладка очень полезна для определенных типов проблем, но до сих пор не используется широко. [5]

Отладка путешествия во времени

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

Зависимость от языка

Некоторые отладчики работают на одном конкретном языке, в то время как другие могут прозрачно обрабатывать несколько языков. Например, если основная целевая программа написана на COBOL, но вызывает подпрограммы языка ассемблера и подпрограммы PL/1 , отладчику, возможно, придется динамически переключать режимы, чтобы приспособиться к изменениям в языке по мере их возникновения.

Защита памяти

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

Аппаратная поддержка отладки

Большинство современных микропроцессоров имеют в своей конструкции как минимум одну из следующих функций, упрощающих отладку:

  • Аппаратная поддержка пошагового выполнения программы, например флаг ловушки .
  • Набор инструкций, отвечающий требованиям виртуализации Попека и Голдберга, упрощает написание программного обеспечения отладчика, работающего на том же ЦП, что и отлаживаемое программное обеспечение; такой ЦП может выполнять внутренние циклы тестируемой программы на полной скорости и при этом оставаться под контролем отладчика.
  • Внутрисистемное программирование позволяет внешнему аппаратному отладчику перепрограммировать тестируемую систему (например, добавляя или удаляя контрольные точки инструкций). Многие системы с такой поддержкой ISP также имеют другую поддержку аппаратной отладки.
  • Аппаратная поддержка точек останова кода и данных , например, компараторы адресов и компараторы значений данных или, что требует значительно больше работы, аппаратное обеспечение для обнаружения ошибок страниц . [6]
  • Доступ JTAG к интерфейсам отладки оборудования, таким как на процессорах архитектуры ARM или с использованием набора команд Nexus . Процессоры, используемые во встраиваемых системах, обычно имеют обширную поддержку отладки JTAG.
  • Микроконтроллерам с числом контактов не менее шести необходимо использовать заменители JTAG с меньшим числом контактов, такие как BDM , Spy-Bi-Wire или debugWIRE на Atmel AVR . DebugWIRE, например, использует двунаправленную передачу сигналов на контакте RESET.

Отладочные интерфейсы

Некоторые из самых эффективных и популярных отладчиков реализуют только простой интерфейс командной строки (CLI) — часто для максимальной переносимости и минимизации потребления ресурсов. Разработчики обычно считают отладку через графический пользовательский интерфейс (GUI) более простой и продуктивной. [ необходима цитата ] Это причина визуальных интерфейсов, которые позволяют пользователям контролировать и контролировать подчиненные отладчики CLI-only через графический пользовательский интерфейс . Некоторые интерфейсы отладчиков GUI разработаны для совместимости с различными отладчиками CLI-only, в то время как другие нацелены на один конкретный отладчик.

Отладка часто используется для незаконного взлома или пиратства программного обеспечения, что обычно незаконно, даже если сделано не злонамеренно. Crackme — это программы, специально разработанные для взлома или отладки. Эти программы позволяют тем, у кого есть отладчики, практиковать свои навыки отладки, не попадая в юридические неприятности.

Список отладчиков

Вот некоторые широко используемые отладчики:

Более ранние отладчики мини-компьютеров включают в себя:

Отладчики мэйнфреймов включают в себя:

Смотрите также

Ссылки

Цитаты

  1. Аггарвал и Кумар, стр. 302.
  2. ^ Аггарвал и Кумар 2003, стр. 301.
  3. Аггарвал и Кумар, стр. 307-312.
  4. ^ О'Каллахан, Роберт; Джонс, Крис; Фройд, Натан; Хьюи, Кайл; Нолл, Альберт; Партуш, Нимрод (2017). «Инженерная запись и воспроизведение для развертывания. Расширенный технический отчет». arXiv : 1705.05937 [cs.PL].
  5. ^ Филип Классен; Undo Software. "Почему обратная отладка используется редко?". Programmers Stack Exchange . Stack Exchange, Inc . Получено 12 апреля 2015 г. .
  6. ^ Аггарвал и Кумар 2003, стр. 299-301.

Источники

  • Санджив Кумар Аггарвал; М. Сарат Кумар (2003). «Отладчики для языков программирования». В YN Srikant; Прити Шанкар (ред.). Справочник по проектированию компиляторов: оптимизация и генерация машинного кода . Бока-Ратон, Флорида: CRC Press . стр.  295–327 . ISBN 978-0-8493-1240-3.
  • Джонатан Б. Розенберг (1996). Как работают отладчики: алгоритмы, структуры данных и архитектура . John Wiley & Sons . ISBN 0-471-14966-7.
  • Инструменты отладки для Windows
  • OpenRCE: Различные ресурсы отладчика и плагины
  • IntelliTrace MSDN, Visual Studio 2015
Retrieved from "https://en.wikipedia.org/w/index.php?title=Debugger&oldid=1263252344"