Введение

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

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

Особенности

Как правило, отладчики предоставляют процессор запросов, разрешитель символов, интерпретатор выражений и интерфейс поддержки отладки на верхнем уровне. Отладчики также предлагают более сложные функции, такие как пошаговое выполнение программы (одиночное выполнение или анимация программы), остановка (приостановка) (приостановка программы для изучения текущего состояния) при возникновении определенного события или по достижении указанной инструкции с помощью точки останова, а также отслеживание значений переменных. Некоторые отладчики позволяют изменять состояние программы во время ее выполнения. Также может быть возможно продолжить выполнение в другом месте программы, чтобы обойти сбой или логическую ошибку. Та же функциональность, которая делает отладчик полезным для исправления ошибок, позволяет использовать его как инструмент для взлома программного обеспечения, чтобы обойти защиту от копирования, управление цифровыми правами и другие средства защиты программного обеспечения. Он также часто полезен в качестве общего инструмента для верификации, оценки покрытия кода и анализа производительности, особенно если отображаются длины путей выполнения инструкций. Ранние микрокомпьютеры с дисковыми накопителями часто выигрывали от возможности диагностики и восстановления поврежденных записей каталогов или реестра, "восстановления" файлов, помеченных как удаленные, или обхода защиты файлов паролем. Большинство распространенных отладочных движков, таких как gdb и dbx, предоставляют интерфейсы командной строки, основанные на консоли. Фронтенды отладчика – это популярные расширения для отладочных движков, обеспечивающие интеграцию со средами разработки (IDE), анимацию программ и функции визуализации.

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

Запись и воспроизведение отладки, также известная как "запись полёта программного обеспечения" или "запись выполнения программы", фиксирует изменения состояния приложения и сохраняет их на диск по мере выполнения каждой инструкции программы. Затем эту запись можно многократно воспроизводить и интерактивно отлаживать для диагностики и устранения дефектов. Отладка с помощью записи и воспроизведения особенно полезна при удаленной отладке, а также для выявления и устранения спорадических, недетерминированных и других трудновоспроизводимых ошибок.

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

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

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

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

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

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

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

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

Передние части отладки

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