stringtranslate.com

Отладка

В инженерии отладка — это процесс поиска основной причины , обходных путей и возможных исправлений ошибок .

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

Этимология

Запись в журнале компьютера Mark II с мотыльком, приклеенным к странице.

Термин «ошибка» в смысле «дефект» появился как минимум в 1878 году, когда Томас Эдисон назвал «небольшие недостатки и трудности» в своих изобретениях «ошибками».

Популярная история 1940-х годов принадлежит адмиралу Грейс Хоппер . [1] Когда она работала над компьютером Mark II в Гарвардском университете, ее коллеги обнаружили мотылька , застрявшего в реле, что препятствовало работе, и записали в журнале «Первый реальный случай обнаружения ошибки». Хотя это, вероятно, шутка , объединяющая два значения слова «ошибка» (биологическая и дефектная), история указывает на то, что этот термин использовался в компьютерной сфере в то время.

Точно так же термин «отладка» использовался в аэронавтике до того, как он появился в мире компьютеров. В письме Дж. Роберта Оппенгеймера , директора Манхэттенского проекта создания атомной бомбы времен Второй мировой войны в Лос-Аламосе, этот термин использовался в письме доктору Эрнесту Лоуренсу из Калифорнийского университета в Беркли от 27 октября 1944 года [2] относительно набора дополнительных технических специалистов. персонал. В статье Оксфордского словаря английского языка, посвященной отладке, термин «отладка» используется применительно к испытаниям авиационных двигателей в статье 1945 года в Журнале Королевского авиационного общества. Статья в «ВВС» (июнь 1945 г. стр. 50) посвящена отладке авиационных фотоаппаратов.

Основополагающая статья Гилла [3] 1951 года представляет собой самое раннее углубленное обсуждение ошибок программирования, но в ней не используется термин «ошибка» или «отладка» .

В цифровой библиотеке ACM термин «отладка» впервые используется в трех статьях национальных собраний ACM 1952 года. [4] [5] [6] В двух из трех этот термин заключен в кавычки.

К 1963 году отладка стала достаточно распространенным термином, чтобы его можно было упомянуть вскользь без объяснения причин на первой странице руководства CTSS . [7]

Объем

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

Инструменты

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

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

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

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

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

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

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

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

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

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

Техники

Автоматическое исправление ошибок

Автоматическое исправление ошибок — это автоматическое исправление ошибок в программном обеспечении без вмешательства человека-программиста. [15] [16] [17] Его также часто называют автоматической генерацией исправлений , автоматическим исправлением ошибок или автоматическим восстановлением программы . [17] Типичная цель таких методов — автоматическое создание правильных исправлений для устранения ошибок в программах, не вызывая регрессии программного обеспечения . [18]

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

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

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

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

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

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

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

Смотрите также

Рекомендации

  1. ^ "InfoWorld, 5 октября 1981 г." 5 октября 1981 года. Архивировано из оригинала 18 сентября 2019 года . Проверено 17 июля 2019 г.
  2. ^ «Архивная копия». Архивировано из оригинала 21 ноября 2019 г. Проверено 17 декабря 2019 г.{{cite web}}: CS1 maint: archived copy as title (link)
  3. ^ С. Гилл, Диагностика ошибок в программах EDSAC. Архивировано 6 марта 2020 г. в Wayback Machine , Труды Лондонского королевского общества. Серия А, Математические и физические науки, Том. 206, № 1087 (22 мая 1951 г.), стр. 538-554.
  4. ^ Роберт В.Д. Кэмпбелл, Эволюция автоматических вычислений. Архивировано 18 сентября 2019 г. в Wayback Machine , Материалы национального собрания ACM 1952 года (Питтсбург), стр. 29-32, 1952.
  5. ^ Алекс Орден, Решение систем линейных неравенств на цифровом компьютере, Материалы национального собрания ACM 1952 года (Питтсбург), с. 91-95, 1952.
  6. ^ Ховард Б. Демут, Джон Б. Джексон, Эдмунд Кляйн, Н. Метрополис, Уолтер Орведаль, Джеймс Х. Ричардсон, MANIAC doi=10.1145/800259.808982, Протоколы национального собрания ACM 1952 года (Торонто), стр. 13-16
  7. ^ Совместимая система разделения времени. Архивировано 27 мая 2012 г. в Wayback Machine , MIT Press, 1963.
  8. ^ «Посмертная отладка». Архивировано из оригинала 17 декабря 2019 г. Проверено 17 декабря 2019 г.
  9. ^ Э. Дж. Гаусс (1982). «Методика: алгоритм отладки «волчьего забора»». Коммуникации АКМ . 25 (11): 780. дои : 10.1145/358690.358695 . S2CID  672811.
  10. ^ Целлер, Андреас (2005). Почему программы терпят неудачу: Руководство по систематической отладке . Морган Кауфманн. ISBN 1-55860-866-4.
  11. ^ «Кент Бек, Hit 'em High, Hit 'Em Low: регрессионное тестирование и сжатие Саффа» . Архивировано из оригинала 11 марта 2012 г.
  12. Райнсбергер, JB (28 марта 2022 г.). «Сжатие Саффа». Заклинатель кода . Проверено 28 марта 2022 г.
  13. ^ Целлер, Андреас (1 ноября 2002 г.). «Выделение причинно-следственных цепочек из компьютерных программ». Заметки по разработке программного обеспечения ACM SIGSOFT . 27 (6): 1–10. дои : 10.1145/605466.605468. ISSN  0163-5948. S2CID  12098165.
  14. ^ Бонд, Майкл Д.; Нетеркот, Николас; Кент, Стивен В.; Гайер, Сэмюэл З.; МакКинли, Кэтрин С. (2007). «Отслеживание плохих яблок». Материалы 22-й ежегодной конференции ACM SIGPLAN по системам и приложениям объектно-ориентированного программирования — OOPSLA '07 . п. 405. дои : 10.1145/1297027.1297057. ISBN 9781595937865. S2CID  2832749.
  15. ^ Ринар, Мартин С. (2008). «Техническая перспектива Исправление ошибок программы». Коммуникации АКМ . 51 (12): 86. дои : 10.1145/1409360.1409381. S2CID  28629846.
  16. ^ Харман, Марк (2010). «Технологии автоматического исправления». Коммуникации АКМ . 53 (5): 108. дои :10.1145/1735223.1735248. S2CID  9729944.
  17. ^ аб Газзола, Лука; Микуччи, Даниэла; Мариани, Леонардо (2019). «Автоматическое восстановление программного обеспечения: обзор» (PDF) . Транзакции IEEE по разработке программного обеспечения . 45 (1): 34–67. дои : 10.1109/TSE.2017.2755013 . hdl : 10281/184798. S2CID  57764123.
  18. ^ Тан, Шин Хвэй; Ройчудри, Абхик (2015). «relifix: автоматическое исправление регрессий программного обеспечения». 2015 IEEE/ACM 37-я Международная конференция IEEE по программной инженерии . IEEE. стр. 471–482. дои : 10.1109/ICSE.2015.65. ISBN 978-1-4799-1934-5. S2CID  17125466.
  19. ^ «Аппаратный отладчик SuperTrace Probe» . www.ghs.com . Архивировано из оригинала 1 декабря 2017 г. Проверено 25 ноября 2017 г.
  20. ^ «Отладчик и инструменты трассировки в реальном времени» . www.lauterbach.com . Архивировано из оригинала 25 января 2022 г. Проверено 5 июня 2020 г.
  21. ^ Танкрети, Мэтью; Хоссейн, Мохаммад Саджад; Багчи, Саураб; Рагунатан, Виджай (2011). «Авекша». Материалы 9-й конференции ACM по встраиваемым сетевым сенсорным системам . СенСис '11. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 288–301. дои : 10.1145/2070942.2070972. ISBN 9781450307185. S2CID  14769602.
  22. ^ Лим, Роман; Феррари, Федерико; Циммерлинг, Марко; Вальзер, Кристоф; Соммер, Филипп; Бойтель, Январь (2013). «ФлокЛаб». Материалы 12-й международной конференции «Обработка информации в сенсорных сетях» . ИПСН '13. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 153–166. дои : 10.1145/2461381.2461402. ISBN 9781450319591. S2CID  447045.
  23. ^ Шилдс, Тайлер (2 декабря 2008 г.). «Серия по борьбе с отладкой - Часть I». Веракод . Архивировано из оригинала 19 октября 2016 г. Проверено 17 марта 2009 г.
  24. ^ ab «Защита программного обеспечения посредством борьбы с отладкой Майкл Н. Ганьон, Стивен Тейлор, Ануп Гош» (PDF) . Архивировано из оригинала (PDF) 1 октября 2011 г. Проверено 25 октября 2010 г.
  25. ^ Росс Дж. Андерсон (23 марта 2001 г.). Инженерия безопасности . Уайли. п. 684. ИСБН 0-471-38922-6.
  26. ^ «Microsoft Word для DOS 1.15» . Архивировано из оригинала 14 мая 2013 г. Проверено 22 июня 2013 г.

дальнейшее чтение

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