Отладка

редактировать
Процесс поиска и устранения дефектов или проблем в компьютерной программе

В компьютерном программировании и разработка программного обеспечения, отладка - это процесс поиска и устранения ошибок (дефектов или проблем, препятствующих правильной работе) в компьютерных программах, программное обеспечение или системы.

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

Содержание

  • 1 Происхождение термина
  • 2 Область применения
  • 3 Инструменты
  • 4 Процесс отладки
  • 5 Техники
  • 6 Отладка для встроенных систем
  • 7 Анти-отладка
  • 8 См. Также
  • 9 Ссылки
  • 10 Дополнительная литература
  • 11 Внешние ссылки

Происхождение термина

Запись в компьютерном журнале Mark II с изображением бабочки, приклеенной к странице

Термины «ошибка» и «отладка» обычно приписываются адмиралу Грейс Хоппер в 1940-х годах. Когда она работала над компьютером Mark II в Гарвардском университете, ее сотрудники обнаружили моль, застрявшую в реле и тем самым препятствующую работе, после чего она заметила, что они «отлаживают» систему. Однако термин «ошибка» в смысле «техническая ошибка» восходит как минимум к 1878 году и относится к Томасу Эдисону (см. программная ошибка для более полного обсуждения). Точно так же термин «отладка», кажется, использовался как термин в аэронавтике до того, как войти в мир компьютеров. В самом деле, в интервью Грейс Хоппер отметила, что она не придумывала этот термин. Ночная бабочка соответствовала уже существующей терминологии, поэтому ее спасли. Письмо от Дж. Роберт Оппенгеймер (руководитель проекта создания атомной бомбы Второй мировой войны «Манхэттен» в Лос-Аламосе, Нью-Мексико) использовал этот термин в письме доктору Эрнесту Лоуренсу в Калифорнийский университет в Беркли от 27 октября 1944 года относительно набор дополнительного технического персонала.

В статье Оксфордского словаря английского языка для слова «отладка» цитируется термин «отладка», использованный в отношении испытаний авиационных двигателей в статье 1945 года в Журнале Королевского авиационного общества. Статья в «Военно-воздушных силах» (июнь 1945 г., стр. 50) также относится к отладке, на этот раз авиационных камер. Ошибка Хоппера была обнаружена 9 сентября 1947 года. Программисты не использовали этот термин до начала 1950-х годов. Основополагающая статья Гилла в 1951 году - самое раннее подробное обсуждение ошибок программирования, но в ней не используются термины «ошибка» или «отладка». В цифровой библиотеке ACM термин «отладка» впервые используется в трех статьях, опубликованных на Национальных собраниях ACM 1952 года. Двое из трех используют этот термин в кавычках. К 1963 году термин «отладка» был достаточно распространенным, чтобы его можно было упомянуть мимоходом без объяснения на странице 1 руководства по CTSS.

Статья Пегги А. Кидвелл «Преследование неуловимой компьютерной ошибки» обсуждает этимологию понятий «ошибка» и «отладка» более подробно.

Объем

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

Инструменты

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

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

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

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

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

Для отладки электронного оборудования (например, компьютерного оборудования ), а также низкоуровневого программного обеспечения (например, BIOS, драйверов устройств ) и микропрограммное обеспечение, такие инструменты, как осциллографы, логические анализаторы или внутрисхемные эмуляторы (ICE), часто используются по отдельности или в комбинации. ICE может выполнять многие типичные задачи программного отладчика на низкоуровневом программном обеспечении и микропрограммном обеспечении.

Процесс отладки

Обычно первым шагом в отладке является попытка воспроизвести проблема. Это может быть нетривиальная задача, например, как с параллельными процессами и некоторыми Heisenbugs. Кроме того, конкретная пользовательская среда и история использования могут затруднить воспроизведение проблемы.

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

После того, как тестовый пример будет достаточно упрощен, программист может использовать инструмент отладчика для проверки состояний программы (значения переменных плюс стек вызовов ) и отследить источник проблемы ( с). В качестве альтернативы можно использовать отслеживание. В простых случаях трассировка - это всего лишь несколько операторов печати, которые выводят значения переменных в определенных точках выполнения программы.

Методы

  • Интерактивная отладка
  • Отладка печати (или трассировка) - это акт наблюдения (в реальном времени или в записи) операторов трассировки или операторов печати, которые указывают ход выполнения процесса. Иногда это называют отладкой printf из-за использования функции printf в C. Этот вид отладки был включен командой TRON в исходных версиях ориентированного на новичков BASIC язык программирования. TRON расшифровывался как Trace On. TRON заставлял печатать номера строк каждой BASIC-командной строки во время работы программы.
  • Удаленная отладка - это процесс отладки программы, запущенной в системе, отличной от отладчика. Чтобы начать удаленную отладку, отладчик подключается к удаленной системе по каналу связи, например по локальной сети. Затем отладчик может управлять выполнением программы в удаленной системе и получать информацию о ее состоянии.
  • Посмертная отладка - это отладка программы после того, как она уже потерпела крах. Связанные методы часто включают различные методы отслеживания, такие как изучение файлов журнала, вывод стека вызовов при сбое и анализ дампа памяти (или дампа ядра ) аварийного процесс. Дамп процесса может быть получен системой автоматически (например, когда процесс завершился из-за необработанного исключения), или введенной программистом инструкцией, или вручную интерактивным пользователем.
  • " Алгоритм «волчьей ограды»: Эдвард Гаусс описал этот простой, но очень полезный и теперь известный алгоритм в статье 1982 года для Communications of the ACM следующим образом: «На Аляске есть один волк; как вы его нашли? Первая сборка забор посередине штата, дождитесь, пока волк завоет, определите, с какой стороны забора он находится. Повторите процесс только с этой стороны, пока не дойдете до точки, где вы можете увидеть волка ». Это реализовано, например, в системе управления версиями Git в качестве команды git bisect, которая использует вышеуказанный алгоритм для определения того, какой фиксация привел к конкретной ошибке.
  • Запись и воспроизведение отладка - это метод создания записи выполнения программы (например, с использованием бесплатного инструмента отладки rr Mozilla; включение / выполнение), которую можно воспроизвести и отладить в интерактивном режиме. Полезно для удаленной отладки и устранения прерывистых, недетерминированных и других трудно воспроизводимых дефектов.
  • Delta Debugging - метод автоматизации упрощения тестовых примеров.
  • Saff Squeeze - методика устранения изоляция отказа в тесте с помощью постепенного встраивания частей неудачного теста.
  • Отслеживание причинно-следственной связи: существуют методы для отслеживания причинно-следственных цепочек в вычислениях. Эти методы могут быть адаптированы для конкретных ошибок, таких как разыменование нулевого указателя.

Отладка для встроенных систем

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

Несмотря на упомянутую выше проблему неоднородности, некоторые отладчики были разработаны как в коммерческих целях, так и в качестве исследовательских прототипов. Примеры коммерческих решений поступают от Green Hills Software, Lauterbach GmbH и MPLAB-ICD от Microchip (для внутрисхемного отладчика). Двумя примерами инструментов исследовательских прототипов являются Aveksha и Flocklab. Все они используют функциональность, доступную на недорогих встраиваемых процессорах, модуль отладки на кристалле (OCDM), сигналы которого отображаются через стандартный интерфейс JTAG. Они оцениваются на основе того, сколько изменений требуется в приложении, и скорости событий, за которыми они могут успевать.

В дополнение к типичной задаче выявления ошибок в системе, отладка встроенной системы также направлена ​​на сбор информации о рабочих состояниях системы, которая затем может быть использована для анализа системы: найти способы улучшить ее производительности или для оптимизации других важных характеристик (например, энергопотребления, надежности, реакции в реальном времени и т. д.).

Анти-отладка

Анти-отладка - это «реализация одного или нескольких методов в компьютерном коде, которая препятствует попыткам обратного проектирования или отладки целевого процесса». Он активно используется признанными издателями в схемах защиты от копирования, но также используется вредоносным ПО, чтобы усложнить его обнаружение и устранение. Методы, используемые в противодействии отладке, включают:

  • на основе API: проверка существования отладчика с использованием системной информации
  • На основе исключений: проверка, не мешают ли исключения
  • процессу и блоки потоков: проверьте, обрабатывались ли блоки процессов и потоков
  • Измененный код: проверяйте изменения кода, сделанные отладчиком, обрабатывающим программные точки останова
  • На основе аппаратных средств и регистров: проверяйте аппаратные точки останова и регистры ЦП
  • Время и задержка: проверьте время, затраченное на выполнение инструкций
  • Обнаружение и наказание отладчика

Ранний пример анти-отладки существовал в ранних версиях Microsoft Word, который, если был обнаружен отладчик, выдавал сообщение, в котором говорилось: «Древо зла приносит горькие плоды. Теперь мусор программный диск.», После чего привод гибких дисков издавал тревожные звуки с намерением отпугивания пользователя от повторной попытки.

См. также

Ссылки

Дополнительная литература

  • Agans, David J. (2002). Отладка: девять обязательных правил для поиска даже самых неуловимых программных и аппаратных проблем. AMACOM. ISBN 0-8144-7168-4.
  • Бланден, Билл (2003). Software Exorcism: Руководство по отладке и оптимизации устаревшего кода. АПресс. ISBN 1-59059-234-4.
  • Ford, Ann R.; Теори, Тоби Дж. (2002). Практическая отладка в C ++. Прентис Холл. ISBN 0-13-065394-2.
  • Грёткер, Торстен; Хольтманн, Ульрих; Кединг, Хольгер; Влока, Маркус (2012). Руководство разработчика по отладке, второе издание. Создает пространство. ISBN 978-1-4701-8552-7.
  • Метцгер, Роберт К. (2003). Отладка мышлением: мультидисциплинарный подход. Цифровая пресса. ISBN 1-55558-307-5.
  • Майерс, Гленфорд Дж. (2004). Искусство тестирования программного обеспечения. John Wiley Sons Inc. ISBN 0-471-04328-1.
  • Роббинс, Джон (2000). Отладка приложений. Microsoft Press. ISBN 0-7356-0886-5.
  • Теллес, Мэтью А.; Се, Юань (2001). Наука отладки. Группа Кориолиса. ISBN 1-57610-917-8.
  • Востоков, Дмитрий (2008). Том 1. Антология анализа дампа памяти. OpenTask. ISBN 978-0-9558328-0-2.
  • Целлер, Андреас (2009). Почему программы не работают, второе издание: руководство по систематической отладке. Морган Кауфманн. ISBN 978-0-1237-4515-6.

Внешние ссылки

Викицитатник содержит цитаты, связанные с: Отладкой
Викибуке Компьютерное программирование В Principles есть страница по теме: Отладка
Последняя правка сделана 2021-05-17 10:37:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте