Степпинг (отладка)
![]() | Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Май 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.
- Я рисую — среда анимации программы
- Программная анимация как способ преподавания и изучения дизайна и анализа программ.
- Структурированная информация о тестировании программного обеспечения (например, история тестирования программного обеспечения), опубликованная в справочниках по тестированию.