Отладчик или средство отладки — это компьютерная программа, используемая для тестирования и отладки других программ (целевой программы). Основное применение отладчика — запуск целевой программы в контролируемых условиях, которые позволяют программисту отслеживать ее выполнение и контролировать изменения в ресурсах компьютера, которые могут указывать на неисправный код. Типичные средства отладки включают возможность запускать или останавливать целевую программу в определенных точках, отображать содержимое памяти, регистров ЦП или устройств хранения (например, дисковых накопителей) и изменять содержимое памяти или регистров для ввода выбранных тестовых данных, которые могут быть причиной неисправного выполнения программы.
Код, который будет проверяться, может также работать на симуляторе набора инструкций (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 , отладчику, возможно, придется динамически переключать режимы, чтобы приспособиться к изменениям в языке по мере их возникновения.
Некоторые отладчики также включают защиту памяти, чтобы избежать нарушений хранения, таких как переполнение буфера . Это может быть чрезвычайно важно в средах обработки транзакций , где память динамически выделяется из «пулов» памяти на основе задачи за задачей.
Большинство современных микропроцессоров имеют в своей конструкции как минимум одну из следующих функций, упрощающих отладку:
Некоторые из самых эффективных и популярных отладчиков реализуют только простой интерфейс командной строки (CLI) — часто для максимальной переносимости и минимизации потребления ресурсов. Разработчики обычно считают отладку через графический пользовательский интерфейс (GUI) более простой и продуктивной. [ необходима цитата ] Это причина визуальных интерфейсов, которые позволяют пользователям контролировать и контролировать подчиненные отладчики CLI-only через графический пользовательский интерфейс . Некоторые интерфейсы отладчиков GUI разработаны для совместимости с различными отладчиками CLI-only, в то время как другие нацелены на один конкретный отладчик.
Отладка часто используется для незаконного взлома или пиратства программного обеспечения, что обычно незаконно, даже если сделано не злонамеренно. Crackme — это программы, специально разработанные для взлома или отладки. Эти программы позволяют тем, у кого есть отладчики, практиковать свои навыки отладки, не попадая в юридические неприятности.
Вот некоторые широко используемые отладчики:
Более ранние отладчики мини-компьютеров включают в себя:
Отладчики мэйнфреймов включают в себя: