Jump to content

Отладка

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

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

Этимология [ править ]

Запись в журнале компьютера 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 например, . Конкретная пользовательская среда и история использования также могут затруднить воспроизведение проблемы.

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

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

Техники [ править ]

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. ^ «ИнфоУорлд, 5 октября 1981 г.» . 5 октября 1981 года. Архивировано из оригинала 18 сентября 2019 года . Проверено 17 июля 2019 г.
  2. ^ «Архивная копия» . Архивировано из оригинала 21 ноября 2019 г. Проверено 17 декабря 2019 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  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. ^ Райнсбергер, Дж. Б. (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. ^ Jump up to: Перейти обратно: а б «Защита программного обеспечения посредством борьбы с отладкой Майкл Н. Ганьон, Стивен Тейлор, Ануп Гош» (PDF) . Архивировано из оригинала (PDF) 1 октября 2011 г. Проверено 25 октября 2010 г.
  25. ^ Росс Дж. Андерсон (23 марта 2001 г.). Инженерия безопасности . Уайли. п. 684. ИСБН  0-471-38922-6 .
  26. ^ «Microsoft Word для DOS 1.15» . Архивировано из оригинала 14 мая 2013 г. Проверено 22 июня 2013 г.

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

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 38a9bb3e8bd8f7f5d5a9627e2445c44d__1715847240
URL1:https://arc.ask3.ru/arc/aa/38/4d/38a9bb3e8bd8f7f5d5a9627e2445c44d.html
Заголовок, (Title) документа по адресу, URL1:
Debugging - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)