Википедия

Отладка программы

Отла́дка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:

  • узнавать текущие значения переменных;
  • выяснять, по какому пути выполнялась программа.
image
Запись в журнале компьютера из Марк II, с мотыльком, приклеенным к странице

Существуют две взаимодополняющие технологии отладки:

  • Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы: оператор за оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия.
  • Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода — на экран, принтер, громкоговоритель или в файл. Вывод отладочных сведений в файл называется журналированием.

Место отладки в цикле разработки программы

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

  1. Программирование — внесение в программу новой функциональности, исправление существующих ошибок.
  2. Тестирование (ручное или автоматизированное; программистом, тестировщиком или пользователем; «дымовое», в режиме чёрного ящика или модульное) — обнаружение факта ошибки.
  3. Воспроизведение ошибки — выяснение условий, при которых ошибка случилась. Это может оказаться непростой задачей при программировании параллельных процессов и при некоторых необычных ошибках, известных как гейзенбаги.
  4. Отладка — обнаружение причины ошибки.

Инструменты

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

Инструменты отладки

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

Также полезными инструментами в руках программиста могут оказаться:

  • Профилировщики. Они позволят определить, сколько времени выполняется тот или иной участок кода. Анализ покрытия позволяет выявить неисполняемые участки кода
  • API логгеры позволяют отследить взаимодействие программы и Windows API при помощи записи сообщений Windows в лог
  • Дизассемблеры позволяют посмотреть ассемблерный код исполняемого файла
  • Снифферы помогут отследить сетевой трафик, генерируемый программой
  • Снифферы аппаратных интерфейсов позволяют увидеть данные, которыми обмениваются система и устройство
  • Логи системы.

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

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

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

Слепое блуждание в отладчике, скорее всего, непродуктивно. Полезнее использовать отладчик, чтобы выяснить состояние программы, в котором она совершает ошибку, затем подумать о том, как такое состояние могло возникнуть. Отладчики могут быть сложными и запутанными программами, особенно для новичков, у которых они вызовут скорее недоумение, чем принесут какую либо пользу…»

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

Брайан Керниган и Роб Пайк

Инструменты, снижающие потребность в отладке

Другое направление — сделать, чтобы отладка нужна была как можно реже. Для этого применяются:

  • Контрактное программирование — чтобы программист подтверждал другим путём, что ему на выходе нужно именно такое поведение программы. В языках, в которых контрактного программирования нет, используется самопроверка программы в ключевых точках.
  • Модульное тестирование — проверка поведения программы по частям.
  • Статический анализ кода — проверка кода на стандартные ошибки «по недосмотру».
  • Высокая культура программирования, в частности, паттерны проектирования, соглашения об именовании и прозрачное поведение отдельных блоков кода — чтобы объявить себе и другим, каким образом должна вести себя та или иная функция.
  • Широкое использование проверенных внешних библиотек.

Безопасность программного кода и отладка

В программном коде может быть так называемое недокументированное поведение — серьёзные ошибки, которые не проявляются при нормальном ходе выполнения программы, однако весьма опасны для безопасности всей системы в случае целенаправленной атаки. Чаще всего это результат ошибок программиста. Наиболее известные примеры — это SQL-инъекция и переполнение буфера. В данном случае задача отладки это:

  • Выявление недокументированного поведения системы
  • Устранение небезопасного кода

Выделяют такие методы:

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

См. также

  • Отладчик
  • Отладчик ядра
  • Отладочные символы
  • Стек вызовов
  • Утечка памяти
  • Точка останова
  • Тестирование программного обеспечения
  • Программирование
  • TRON (команда)

Литература

  • Стив Магьюир, «Создание надёжного кода» (Steve Maguire. Writing Solid Code. Microsoft Press, 1993)
  • Стив Мак-Коннел, «Совершенный код» (Steve McConnel. Code Complete. Microsoft Press, 1993)

Ссылки

  • AMD64 Instruction-Level Debugging With dbx (англ.)
  • AMD64 Instruction-Level Debugging with Sun Studio dbx (англ.)

Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Отладка программы, Что такое Отладка программы? Что означает Отладка программы?

Otla dka etap razrabotki kompyuternoj programmy na kotorom obnaruzhivayut lokalizuyut i ustranyayut oshibki Chtoby ponyat gde voznikla oshibka prihoditsya uznavat tekushie znacheniya peremennyh vyyasnyat po kakomu puti vypolnyalas programma Zapis v zhurnale kompyutera iz Mark II s motylkom prikleennym k stranice Sushestvuyut dve vzaimodopolnyayushie tehnologii otladki Ispolzovanie otladchikov programm kotorye vklyuchayut v sebya polzovatelskij interfejs dlya poshagovogo vypolneniya programmy operator za operatorom funkciya za funkciej s ostanovkami na nekotoryh strokah ishodnogo koda ili pri dostizhenii opredelyonnogo usloviya Vyvod tekushego sostoyaniya programmy s pomoshyu raspolozhennyh v kriticheskih tochkah programmy operatorov vyvoda na ekran printer gromkogovoritel ili v fajl Vyvod otladochnyh svedenij v fajl nazyvaetsya zhurnalirovaniem Mesto otladki v cikle razrabotki programmyTipichnyj cikl razrabotki za vremya zhizni programmy mnogokratno povtoryayushijsya vyglyadit primerno tak Programmirovanie vnesenie v programmu novoj funkcionalnosti ispravlenie sushestvuyushih oshibok Testirovanie ruchnoe ili avtomatizirovannoe programmistom testirovshikom ili polzovatelem dymovoe v rezhime chyornogo yashika ili modulnoe obnaruzhenie fakta oshibki Vosproizvedenie oshibki vyyasnenie uslovij pri kotoryh oshibka sluchilas Eto mozhet okazatsya neprostoj zadachej pri programmirovanii parallelnyh processov i pri nekotoryh neobychnyh oshibkah izvestnyh kak gejzenbagi Otladka obnaruzhenie prichiny oshibki InstrumentyOtladka chasto trebuet vysokoj kvalifikacii i znachitelnyh resursov Sposobnosti programmista k otladke vazhnyj faktor v obnaruzhenii istochnika problemy no slozhnost otladki silno zavisit ot ispolzuemogo yazyka programmirovaniya i instrumentov v chastnosti otladchikov Instrumenty otladki Otladchik eto programmnyj instrument pozvolyayushij programmistu nablyudat za vypolneniem issleduemoj programmy ostanavlivat i perezapuskat eyo progonyat v zamedlennom tempe izmenyat znacheniya v pamyati i dazhe v nekotoryh sluchayah vozvrashat nazad po vremeni Takzhe poleznymi instrumentami v rukah programmista mogut okazatsya Profilirovshiki Oni pozvolyat opredelit skolko vremeni vypolnyaetsya tot ili inoj uchastok koda Analiz pokrytiya pozvolyaet vyyavit neispolnyaemye uchastki koda API loggery pozvolyayut otsledit vzaimodejstvie programmy i Windows API pri pomoshi zapisi soobshenij Windows v log Dizassemblery pozvolyayut posmotret assemblernyj kod ispolnyaemogo fajla Sniffery pomogut otsledit setevoj trafik generiruemyj programmoj Sniffery apparatnyh interfejsov pozvolyayut uvidet dannye kotorymi obmenivayutsya sistema i ustrojstvo Logi sistemy Ispolzovanie yazykov programmirovaniya vysokogo urovnya obychno uproshaet otladku esli takie yazyki soderzhat naprimer sredstva obrabotki isklyuchenij silno oblegchayushie poisk istochnika problemy V nizkourovnevyh yazykah oshibki mogut privodit k nezametnym problemam naprimer povrezhdeniyam pamyati i utechkam pamyati Togda byvaet dovolno trudno opredelit chto stalo pervonachalnoj prichinoj oshibki V etih sluchayah mogut potrebovatsya slozhnye priyomy i sredstva otladki Nash lichnyj vybor staratsya ne ispolzovat otladchiki krome kak dlya prosmotra steka vyzovov ili zhe znachenij pary peremennyh Odna iz prichin etogo zaklyuchaetsya v tom chto ochen legko poteryatsya v detalyah slozhnyh struktur dannyh i putej ispolneniya programmy My schitaem poshagovyj prohod po programme menee produktivnym chem usilennye razmyshleniya i kod proveryayushij sam sebya v kriticheskih tochkah Shyolkane po operatoram zanimaet bolshe vremeni chem prosmotr soobshenij operatorov vydachi otladochnoj informacii rasstavlennyh v kriticheskih tochkah Bystree reshit kuda pomestit operator otladochnoj vydachi chem prohodit shag za shagom kriticheskie uchastki koda dazhe predpolagaya chto my znaem gde nahodyatsya takie uchastki Bolee vazhno to chto otladochnye operatory sohranyayutsya v programme a sessii otladchika perehodyashi Slepoe bluzhdanie v otladchike skoree vsego neproduktivno Poleznee ispolzovat otladchik chtoby vyyasnit sostoyanie programmy v kotorom ona sovershaet oshibku zatem podumat o tom kak takoe sostoyanie moglo vozniknut Otladchiki mogut byt slozhnymi i zaputannymi programmami osobenno dlya novichkov u kotoryh oni vyzovut skoree nedoumenie chem prinesut kakuyu libo polzu Otladka slozhna i mozhet zanimat nepredskazuemo dolgoe vremya poetomu cel v tom chtoby minovat bolshuyu eyo chast Tehnicheskie priyomy kotorye pomogut umenshit vremya otladki vklyuchayut horoshij dizajn horoshij stil proverku granichnyh uslovij proverku pravilnosti ishodnyh utverzhdenij i razumnosti koda horosho razrabotannye interfejsy ogranichennoe ispolzovanie globalnyh peremennyh avtomaticheskie sredstva kontrolya i proverki Gramm profilaktiki stoit tonny lecheniya Brajan Kernigan i Rob Pajk Instrumenty snizhayushie potrebnost v otladke Drugoe napravlenie sdelat chtoby otladka nuzhna byla kak mozhno rezhe Dlya etogo primenyayutsya Kontraktnoe programmirovanie chtoby programmist podtverzhdal drugim putyom chto emu na vyhode nuzhno imenno takoe povedenie programmy V yazykah v kotoryh kontraktnogo programmirovaniya net ispolzuetsya samoproverka programmy v klyuchevyh tochkah Modulnoe testirovanie proverka povedeniya programmy po chastyam Staticheskij analiz koda proverka koda na standartnye oshibki po nedosmotru Vysokaya kultura programmirovaniya v chastnosti patterny proektirovaniya soglasheniya ob imenovanii i prozrachnoe povedenie otdelnyh blokov koda chtoby obyavit sebe i drugim kakim obrazom dolzhna vesti sebya ta ili inaya funkciya Shirokoe ispolzovanie proverennyh vneshnih bibliotek Bezopasnost programmnogo koda i otladkaV programmnom kode mozhet byt tak nazyvaemoe nedokumentirovannoe povedenie seryoznye oshibki kotorye ne proyavlyayutsya pri normalnom hode vypolneniya programmy odnako vesma opasny dlya bezopasnosti vsej sistemy v sluchae celenapravlennoj ataki Chashe vsego eto rezultat oshibok programmista Naibolee izvestnye primery eto SQL inekciya i perepolnenie bufera V dannom sluchae zadacha otladki eto Vyyavlenie nedokumentirovannogo povedeniya sistemy Ustranenie nebezopasnogo koda Vydelyayut takie metody staticheskij analiz koda Na etoj faze programma skaner ishet posledovatelnosti v ishodnom tekste sootvetstvuyushie nebezopasnym vyzovam funkcij i t d Fakticheski idet skanirovanie ishodnogo teksta programmy na osnove specialnoj bazy pravil kotoraya soderzhit opisanie nebezopasnyh obrazcov koda fazzing Eto process podachi na vhod programmy sluchajnyh ili nekorrektnyh dannyh i analiz reakcii programmy Reverse engineering Obratnaya inzheneriya Etot sluchaj voznikaet kogda nezavisimye issledovateli ishut uyazvimosti i nedokumentirovannye vozmozhnosti programmy Sm takzheOtladchik Otladchik yadra Otladochnye simvoly Stek vyzovov Utechka pamyati Tochka ostanova Testirovanie programmnogo obespecheniya Programmirovanie TRON komanda LiteraturaStiv Magyuir Sozdanie nadyozhnogo koda Steve Maguire Writing Solid Code Microsoft Press 1993 Stiv Mak Konnel Sovershennyj kod Steve McConnel Code Complete Microsoft Press 1993 SsylkiAMD64 Instruction Level Debugging With dbx angl AMD64 Instruction Level Debugging with Sun Studio dbx angl Dlya uluchsheniya etoj stati zhelatelno Najti i oformit v vide snosok ssylki na nezavisimye avtoritetnye istochniki podtverzhdayushie napisannoe Prostavit snoski vnesti bolee tochnye ukazaniya na istochniki Pozhalujsta posle ispravleniya problemy isklyuchite eyo iz spiska parametrov Posle ustraneniya vseh nedostatkov etot shablon mozhet byt udalyon lyubym uchastnikom

NiNa.Az

NiNa.Az - Абсолютно бесплатная система, которая делится для вас информацией и контентом 24 часа в сутки.
Взгляните
Закрыто