Программная анимация или пошаговое выполнение относится к теперь очень распространенному методу отладки, при котором код выполняется по одной «строке» за раз. Программист может проверить состояние программы, машины и связанных данных до и после выполнения определенной строки кода. Это позволяет изолированно оценивать эффекты этого оператора или инструкции и, таким образом, получить представление о поведении (или неправильном поведении) выполняющейся программы. Практически все современные IDE и отладчики поддерживают этот режим выполнения. Некоторые инструменты тестирования позволяют выполнять программы поэтапно, при желании, с любым исходным кодом.уровень или уровень машинного кода в зависимости от доступности данных, собранных во время компиляции .
История
Пошаговое выполнение инструкций или единичный цикл также относится к родственному, более микроскопическому, но теперь устаревшему [ сомнительному ] методу отладки кода путем остановки тактовой частоты процессора и ручного увеличения его на один цикл за раз. Чтобы это стало возможным, необходимы три вещи:
- Элемент управления, позволяющий останавливать часы (например, кнопка «Стоп»).
- Второй элемент управления, который позволяет вручную продвигать остановленные часы на один цикл (например, переключатель «шаг инструкции» и кнопка «Пуск»).
- Некоторые средства записи состояния процессора после каждого цикла (например, отображение регистров и памяти).
В линейке процессоров IBM System 360 , анонсированной в 1964 году, эти возможности были обеспечены переключателями на передней панели, кнопками и блоками неоновых огней.
Другие системы, такие как PDP-11, имели аналогичные возможности, опять же на некоторых моделях. Точная конфигурация также зависела от модели. Было бы нелегко предоставить такие возможности на процессорах LSI , таких как линейки Intel x86 и Pentium , из-за соображений охлаждения [ сомнительно ] [ требуется пояснение ] .
По мере того, как многопроцессорность становилась все более распространенным явлением, такие методы имели бы ограниченную практичность, поскольку многие независимые процессы останавливались бы одновременно. Это привело к разработке проприетарного программного обеспечения от нескольких независимых поставщиков, которые предоставляли аналогичные функции, но намеренно ограничивали точки останова и пошаговое выполнение инструкций для определенных прикладных программ в определенных адресных пространствах и потоках . Состояние программы (применительно к выбранному приложению / потоку) сохранялось для проверки на каждом шаге и восстанавливалось перед возобновлением, создавая впечатление единой пользовательской среды. Обычно этого достаточно для диагностики проблем на прикладном уровне.
Вместо использования физической кнопки остановки для приостановки выполнения - чтобы затем начать пошаговое выполнение прикладной программы, точка останова или запрос «Пауза» обычно должны быть установлены заранее, обычно в конкретном операторе / инструкции в программе (выбранной заранее или, альтернативно, с помощью по умолчанию, по первой инструкции).
Чтобы обеспечить полноэкранную «анимацию» программы, обычно требуется подходящее устройство ввода-вывода, такое как видеомонитор, которое может отображать разумный фрагмент кода (например, в разобранном машинном коде или формате исходного кода ) и обеспечивать указатель (например, <==) на текущую инструкцию или строку исходного кода. По этой причине широкому распространению этих полноэкранных аниматоров в мире мэйнфреймов пришлось ждать появления систем обработки транзакций , таких как CICS в начале 1970-х годов, которые изначально ограничивались отладкой прикладных программ, работающих в этой среде. Более поздние версии тех же продуктов обеспечивали межрегиональный мониторинг / отладку пакетных программ и других операционных систем и платформ.
С гораздо более поздним появлением персональных компьютеров примерно с 1980 года, интегрированные отладчики получили возможность более широко встраиваться в этот однопользовательский домен и обеспечивать аналогичную анимацию, разделяя экран пользователя и добавляя «консоль» отладки для обеспечения взаимодействия с программистом.
Borland Turbo Debugger был автономным продуктом, представленным в 1989 году, который обеспечивал полноэкранную анимацию программ для ПК. В более поздних версиях добавлена поддержка объединения анимации с фактическими исходными строками, извлеченными во время компиляции.
Приемы программной анимации
Существует как минимум три различных программных метода для создания «анимации» во время выполнения программы.
- Инструментарий включает добавление дополнительного исходного кода к программе вовремя компиляции для вызова аниматора до или после каждого оператора, чтобы остановить нормальное выполнение. Если программа, которую нужно анимировать, является интерпретируемым типом, например байт-кодом или CIL, интерпретатор (иликод IDE ) использует свой собственный встроенный код для обтекания целевого кода.
- Индуцированное прерывание Этот метод включает принудительное установление точки останова в определенных точках программы во время выполнения, обычно путем изменения инструкции машинного кода в этой точке (это может быть вставленный системный вызов или преднамеренно недопустимая операция) и ожидания прерывания. Когда происходит прерывание, инструмент тестирования обрабатывает его, чтобы сообщить о состоянии программисту. Этот метод позволяет выполнять программу на полной скорости (до тех пор, пока не произойдет прерывание), но имеет тот недостаток, что большинство инструкций, ведущих к прерыванию, не отслеживаются инструментом.
- Имитатор набора инструкций Этот метод обрабатывает машинный код скомпилированных программкак входные «данные» и полностью имитирует инструкции хост-машины, отслеживает код на предмет условных или безусловных точек останова или запрашивает программист «одноцикловые» запросы анимации между каждым шагом.
Сравнение методов
Преимущество последнего метода заключается в том, что в скомпилированную программу не вносятся никакие изменения для обеспечения диагностики, и существует практически неограниченный объем расширенной диагностики, поскольку инструмент может дополнить диагностику хост-системы дополнительными функциями трассировки программного обеспечения. Также с помощью этого метода можно автоматически диагностировать (и предотвращать) многие ошибки программы, включая нарушения памяти и переполнение буфера . Обнаружение цикла также возможно с использованием автоматической трассировки инструкций вместе с пороговыми значениями количества инструкций (например, пауза после 10000 инструкций; отображение последних n инструкций). Второй метод изменяет только инструкцию, которая останавливается перед ее выполнением, а также может затем восстановить ее перед необязательным возобновлением с помощью программист. Некоторые аниматоры дополнительно позволяют использовать более одного метода в зависимости от требований. Например, используя метод 2 для выполнения в определенной точке на полной скорости, а затем используя имитацию набора команд после этого.
Дополнительные возможности
Аниматор может или не может комбинировать в себе другие функции тестирования / отладки, такие как трассировка программы , дамп, условная точка останова и изменение памяти, изменение потока программы , анализ покрытия кода , обнаружение «горячей точки», обнаружение цикла и т. Д.
Примеры программных аниматоров
(На дату первого выпуска заказа)
- Borland Turbo Debugger 1989 - для ПК
- CodeView 1985, Visual Studio Debugger 1995, Visual Studio Express 2005 - для ПК
- Firebug (расширение Firefox) январь 2006 г. - для ПК
Внешние ссылки и ссылки
- Stepping (Visual Studio) Обзор поддержки степпинга в IDE корпорации Microsoft , Visual Studio
- Tarraingim - Программная анимационная среда
- Анимация программ как способ научить и узнать о разработке и анализе программ
- Структурированная информация о тестировании программного обеспечения (например, История тестирования программного обеспечения), опубликованная в справочниках по тестированию.