Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Происхождение термина [ править ]

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

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

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

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

Сфера [ править ]

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

Инструменты [ править ]

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

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

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

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

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

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

Процесс отладки [ править ]

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

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

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

Методы [ править ]

  • Интерактивная отладка
  • Отладка печати (или трассировка) - это процесс отслеживания (в реальном времени или в записи) операторов трассировки или операторов печати, которые указывают ход выполнения процесса. Иногда это называют отладкой printf из-за использования функции printf в C. Этот вид отладки был включен командой TRON в исходных версиях ориентированного на новичков языка программирования BASIC . TRON расшифровывался как «Trace On». TRON заставлял печатать номера строк каждой BASIC-командной строки во время работы программы.
  • Удаленная отладка - это процесс отладки программы, работающей в системе, отличной от отладчика. Чтобы начать удаленную отладку, отладчик подключается к удаленной системе по каналу связи, например по локальной сети. Затем отладчик может контролировать выполнение программы в удаленной системе и получать информацию о ее состоянии.
  • Посмертная отладка - это отладка программы после того, как она уже вышла из строя . Связанные методы часто включают в себя различные методы отслеживания, такие как изучение файлов журнала, вывод стека вызовов при сбое [9] и анализ дампа памяти (или дампа ядра ) сбойного процесса. Дамп процесса может быть получен системой автоматически (например, когда процесс завершился из-за необработанного исключения), или введенной программистом инструкцией, или вручную интерактивным пользователем.
  • Алгоритм «волчьего забора»: Эдвард Гаусс описал этот простой, но очень полезный и ныне известный алгоритм в статье 1982 года, посвященной коммуникациям ACM, следующим образом: «На Аляске есть один волк; как вы его найдете? Сначала постройте забор посередине. штата, подождите, пока волк завоет, определите, с какой стороны забора он находится. Повторите процесс только с этой стороны, пока не дойдете до точки, где вы можете увидеть волка ». [10] Это реализовано, например, в системе контроля версий Git в виде команды git bisect , которая использует вышеупомянутый алгоритм для определения того, какой коммит привел к конкретной ошибке.
  • Отладка с записью и воспроизведением - это метод создания записи выполнения программы (например, с использованием бесплатногоинструмента отладки RR Mozilla; включение обратимой отладки / выполнения), которую можно воспроизвести и отладить в интерактивном режиме. Полезно для удаленной отладки и устранения периодических, недетерминированных и других трудно воспроизводимых дефектов.
  • Дельта-отладка  - метод автоматизации упрощения тестовых случаев. [11] : с.123
  • Saff Squeeze  - метод изоляции неудач в тесте с использованием постепенного встраивания частей неудачного теста. [12]
  • Отслеживание причинно-следственной связи: существуют методы отслеживания причинно-следственных цепочек в вычислениях. [13] Эти методы могут быть адаптированы для конкретных ошибок, таких как разыменование нулевого указателя. [14] [15]

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

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

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

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

Анти-отладка [ править ]

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

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

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

См. Также [ править ]

  • Утверждение (разработка программного обеспечения)
  • Автоматическое исправление ошибок
  • Шаблон отладки
  • Значения отладки Magic
  • Отладка дробовика
  • Программная ошибка
  • Тестирование программного обеспечения
  • Отладка путешествия во времени
  • Таблица трассировки
  • Исправление проблем

Ссылки [ править ]

  1. ^ InfoWorld 5 октября 1981
  2. ^ https://bancroft.berkeley.edu/Exhibits/physics/images/bigscience25.jpg
  3. ^ С. Гилл, Диагностика ошибок в программах EDSAC , Труды Лондонского королевского общества. Серия A, Математические и физические науки, Vol. 206, No. 1087 (22 мая 1951 г.), стр. 538-554
  4. ^ Роберт В. Д. Кэмпбелл, Эволюция автоматических вычислений , Труды национального собрания ACM 1952 г. (Питтсбург), стр. 29-32, 1952.
  5. ^ Алекс Орден, Решение систем линейных неравенств на цифровом компьютере , Труды национального собрания ACM 1952 г. (Питтсбург), стр. 91-95, 1952.
  6. ^ Ховард Б. Демут, Джон Б. Джексон, Эдмунд Кляйн, Н. Метрополис, Уолтер Орведал, Джеймс Х. Ричардсон, MANIAC doi = 10.1145 / 800259.808982, Протоколы национального собрания ACM 1952 года (Торонто), стр. 13–16
  7. ^ Совместимая система разделения времени , MIT Press, 1963
  8. Пегги Олдрич Кидвелл, Преследование неуловимой компьютерной ошибки , IEEE Annals of the History of Computing, 1998.
  9. ^ «Посмертная отладка» .
  10. ^ EJ Гаусс (1982). «Практика: алгоритм отладки волчьего забора» . Коммуникации ACM . DOI : 10.1145 / 358690.358695 . S2CID 672811 . 
  11. Перейти ↑ Zeller, Andreas (2005). Почему программы терпят неудачу: руководство по систематической отладке . Морган Кауфманн. ISBN 1-55860-866-4.
  12. ^ "Кент Бек, Hit 'em High, Hit' em Low: регрессионное тестирование и Saff Squeeze" . Архивировано из оригинала на 2012-03-11.
  13. ^ Zeller, Andreas (2002-11-01). «Выделение причинно-следственных цепочек из компьютерных программ». Примечания по разработке программного обеспечения ACM SIGSOFT . 27 (6): 1–10. DOI : 10.1145 / 605466.605468 . ISSN 0163-5948 . S2CID 12098165 .  
  14. ^ Бонд, Майкл Д .; Nethercote, Николас; Кент, Стивен В .; Guyer, Samuel Z .; МакКинли, Кэтрин С. (2007). «Отслеживание плохих яблок». Материалы 22-й ежегодной конференции ACM SIGPLAN по системам и приложениям объектно-ориентированного программирования - OOPSLA '07 . п. 405. DOI : 10,1145 / 1297027,1297057 . ISBN 9781595937865. S2CID  2832749 .
  15. ^ Корню, Бенуа; Барр, Эрл Т .; Сейнтюрье, Лайонел; Монперрус, Мартин (2016). «Casper: автоматическое отслеживание нулевых разыменований на начало со следами причинности» . Журнал систем и программного обеспечения . 122 : 52–62. DOI : 10.1016 / j.jss.2016.08.062 . ISSN 0164-1212 . 
  16. ^ "Аппаратный отладчик SuperTrace Probe" . www.ghs.com . Проверено 25 ноября 2017 .
  17. ^ «Отладчик и инструменты трассировки в реальном времени» . www.lauterbach.com . Проверено 5 июня 2020 .
  18. ^ Tancreti, Мэтью; Хоссейн, Мохаммад Саджад; Багчи, Саурабх; Рагхунатан, Виджай (2011). «Авекша: программно-аппаратный подход к неразрушающему отслеживанию и профилированию встроенных беспроводных систем». Материалы 9-й конференции ACM по встроенным сетевым сенсорным системам . SenSys '11. Нью-Йорк, Нью-Йорк, США: ACM: 288–301. DOI : 10.1145 / 2070942.2070972 . ISBN 9781450307185. S2CID  14769602 .
  19. ^ Лим, Роман; Феррари, Федерико; Циммерлинг, Марко; Вальзер, Кристоф; Соммер, Филипп; Бейтель, янв (2013). «FlockLab: испытательный стенд для распределенного, синхронизированного отслеживания и профилирования встроенных беспроводных систем». Материалы 12-й Международной конференции по обработке информации в сенсорных сетях . IPSN '13. Нью-Йорк, Нью-Йорк, США: ACM: 153–166. DOI : 10.1145 / 2461381.2461402 . ISBN 9781450319591. S2CID  447045 .
  20. ^ Шилдс, Тайлер (2008-12-02). «Серия Anti-Debugging - Часть I» . Veracode . Проверено 17 марта 2009 .
  21. ^ a b «Защита программного обеспечения с помощью анти-отладки Майкл Н. Ганьон, Стивен Тейлор, Ануп Гош» (PDF) . Архивировано из оригинального (PDF) 01.10.2011 . Проверено 25 октября 2010 .
  22. ^ Росс Дж. Андерсон (2001-03-23). Техника безопасности . п. 684. ISBN 0-471-38922-6.
  23. ^ «Microsoft Word для DOS 1.15» .

Дальнейшее чтение [ править ]

  • Аганс, Дэвид Дж. (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). Искусство тестирования программного обеспечения . ISBN компании John Wiley & Sons Inc. 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.

Внешние ссылки [ править ]

  • Шаблоны  анализа аварийных дампов - подробные статьи по анализу и поиску ошибок в аварийных дампах
  • Изучите основы отладки  - как улучшить свои навыки отладки, хорошая статья на IBM developerWorks (заархивировано из оригинала 18 февраля 2007 г.)
  • Отладка на основе плагинов для встроенных систем
  • Тестирование и отладка встроенных систем - о генерации цифрового ввода  - результаты опроса о тестировании и отладке встроенных систем, Byte Paradigm (архивировано с оригинала 12 января 2012 г.)