Степпинг (отладка)
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Май 2022 г. ) |
Программная анимация или степпинг относится к методу отладки выполнения кода по одной инструкции или строке за раз. Программист может проверять состояние программы, машины и связанных с ними данных до и после выполнения определенной строки кода. Это позволяет программисту оценить влияние каждого оператора или инструкции по отдельности и тем самым получить представление о поведении (или неправильном поведении) исполняемой программы. Почти все современные IDE и отладчики поддерживают этот режим выполнения.
История
[ редактировать ]
инструкций Степинг или одиночный цикл первоначально относился к методу остановки тактовой частоты процессора и ручного продвижения ее на один такт за раз. Чтобы это стало возможным, необходимы три вещи:
- Элемент управления, позволяющий остановить часы (например, кнопка «Стоп»).
- Второй элемент управления, позволяющий вручную переводить остановившиеся часы на один цикл вперед (например, переключатель «шаг инструкции» и кнопка «Пуск»).
- Некоторые средства записи состояния процессора после каждого цикла (например, отображение регистров и памяти).
В процессорах IBM System 360 , анонсированных в 1964 году, эти возможности обеспечивались переключателями, кнопками и неоновыми лампочками на передней панели. Другие системы, такие как PDP-11 , предоставляли аналогичные возможности.
На новых процессорах, которые могут не поддерживать физическую остановку часов и иметь слишком много внутреннего состояния для разумного отображения на панели, аналогичная функциональность может быть обеспечена с помощью флага ловушки , который при включении инструктирует процессор останавливаться после каждой инструкции аналогичным образом. до точки останова .
Поскольку многопроцессорность стала более распространенной, такие методы стали иметь ограниченную практичность, поскольку многие независимые процессы будут останавливаться одновременно. Это привело к разработке проприетарного программного обеспечения от нескольких независимых поставщиков, которое предоставляло аналогичные функции, но намеренно ограничивало точки останова и пошаговое выполнение инструкций для конкретных прикладных программ в определенных адресных пространствах и потоках . Состояние программы (применительно к выбранному приложению/потоку) сохранялось для проверки на каждом этапе и восстанавливалось перед возобновлением, создавая впечатление единой пользовательской среды. Обычно этого достаточно для диагностики проблем на уровне приложения.
Вместо использования физической кнопки остановки для приостановки выполнения - чтобы затем начать пошаговое выполнение прикладной программы, обычно заранее должна быть установлена точка останова или запрос «Пауза», обычно для определенного оператора/инструкции в программе (выбранного заранее или, альтернативно, по умолчанию, по первой инструкции).
Чтобы обеспечить полноэкранную «анимацию» программы, обычно требуется подходящее устройство ввода-вывода, такое как видеомонитор, которое может отображать разумную часть кода (например, в дизассемблированном машинном коде или формате исходного кода ) и обеспечивать указатель (например, <==) на текущую инструкцию или строку исходного кода. По этой причине широкое использование этих полноэкранных аниматоров в мире мэйнфреймов пришлось дождаться появления систем обработки транзакций , таких как CICS в начале 1970-х годов, которые первоначально ограничивались отладкой прикладных программ, работающих в этой среде. Более поздние версии тех же продуктов обеспечивали межрегиональный мониторинг/отладку пакетных программ и других операционных систем и платформ.
С гораздо более поздним появлением персональных компьютеров , примерно с 1980 года, интегрированные отладчики получили возможность более широко включаться в этот единый пользовательский домен и обеспечивать аналогичную анимацию за счет разделения пользовательского экрана и добавления «консоли» отладки для обеспечения взаимодействия с программистом.
Borland Turbo Debugger — это отдельный продукт, представленный в 1989 году и обеспечивающий полноэкранную программную анимацию для ПК. В более поздних версиях добавлена поддержка объединения анимации с реальными строками исходного кода, извлеченными во время компиляции.
Техники программной анимации.
[ редактировать ]Существует как минимум три различных программных метода создания «анимации» во время выполнения программы.
- Инструментирование включает добавление дополнительного исходного кода в программу во время компиляции для вызова аниматора до или после каждого оператора, чтобы остановить нормальное выполнение. Эта функциональность может быть частью библиотеки времени выполнения , как в Python
pdb
mod , или это может принимать форму вставки инструкции точки останова, которая запускает внешний отладчик, если он подключен. - Вызванное прерывание. Этот метод включает в себя установку точки останова в определенных точках программы во время выполнения, обычно путем изменения инструкции машинного кода в этой точке (это может быть вставленный системный вызов или намеренно недопустимая операция) и ожидания прерывания. Когда происходит прерывание, оно обрабатывается инструментом тестирования и сообщает о статусе программисту. Этот метод позволяет выполнять программу на полной скорости (до тех пор, пока не произойдет прерывание), но имеет тот недостаток, что большинство инструкций, приводящих к прерыванию, не отслеживаются инструментом.
- Симулятор набора команд. скомпилированной программы Этот метод рассматривает машинный код как входные «данные» и полностью имитирует инструкции хост-машины, отслеживает код на предмет условных или безусловных точек останова или запрошенных программистом запросов анимации «один цикл» между каждым шагом.
Сравнение методов
[ редактировать ]Преимущество последнего метода заключается в том, что в скомпилированную программу для обеспечения диагностики не вносятся никакие изменения, и существует практически неограниченный простор для расширенной диагностики, поскольку инструмент может дополнить диагностику хост-системы дополнительными функциями программного обеспечения трассировки. С помощью этого метода также можно автоматически диагностировать (и предотвращать) многие ошибки программы, включая нарушения памяти и переполнение буфера . Обнаружение циклов также возможно с использованием автоматической трассировки инструкций вместе с пороговыми значениями количества команд (например, пауза после 10 000 инструкций; отображение последних n инструкций). Второй метод только изменяет команду, которая будет остановлена перед ее выполнением, а также может затем восстановить ее перед необязательным возобновлением программистом. Некоторые аниматоры при желании позволяют использовать более одного метода в зависимости от требований. Например, используя метод 2 для выполнения до определенной точки на полной скорости, а затем используя моделирование набора команд после этого.
Дополнительные возможности
[ редактировать ]Аниматор может комбинировать или не комбинировать в себе другие функции тестирования/отладки, такие как трассировка программы , дамп, условная точка останова и изменение памяти , потока программы изменение , анализ покрытия кода , обнаружение «горячих точек», обнаружение циклов и тому подобное.
Ссылки
[ редактировать ]Внешние ссылки
[ редактировать ]- Степпинг (Visual Studio) Обзор поддержки шагов в среде корпорации Microsoft IDE , Visual Studio.
- Я рисую — среда программной анимации
- Программная анимация как способ преподавания и изучения дизайна и анализа программ.
- Структурированная информация о тестировании программного обеспечения (например, история тестирования программного обеспечения), опубликованная в справочниках по тестированию.