Отладка это в программировании. Отладка это в программировании.

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

Как поймать баг в коде: отладка в браузере

Теперь давайте сделаем еще один шаг вперед, рассмотрим отладку скриптов в браузере и увидим, как это может нам помочь.

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

Варварская отладка

Самый простой вариант отладки — добавить метод console.log() в код JavaScript, заключив необходимые отладочные данные в скобки. Console.log() — это просто способ вывода некоторого текста на консоль.

Например, внутри функции вы можете сказать console.log(‘Вызвана такая-то функция’) — и со временем вы увидите, что функция была вызвана (или нет).

Недостатком этого подхода является то, что он создает много отладочного мусора в коде. Если для функции не предусмотрено протоколирование, мы не найдем в ней ошибку.

К счастью, человечество изобрело множество удобных инструментов отладки, помимо console.log().

Что нужно для отладки

Для решения простых задач JavaScript проще всего использовать встроенный отладчик в Google Chrome. Единственное ограничение заключается в том, что он работает только с файлами сценариев, а не с кодом, встроенным в страницу. Это означает, что отладка не будет работать, если код сценария находится в HTML-файле внутри тега.

Чтобы открыть панель отладки в Chrome, нажмите ⌘+⌥+I и переключитесь на вкладку «Источники»:

Как поймать баг в коде: отладка в браузере

Виды ошибок

Ошибки компиляции

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

В интерпретируемых языках (таких как Python) текст программы переводится в машинный код команда за командой и выполняется немедленно. К моменту обнаружения ошибки часть программы может быть уже выполнена.

Ошибки компоновки

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

Ошибки выполнения (RUNTIME Error)

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

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

Ошибки выполнения можно разделить на три большие группы.

Ошибки определения данных или неправильно определенные входные данные. Они могут возникать во время выполнения операций ввода-вывода.

К ним относятся:

  • ошибки преобразования;
  • ошибки данных;
  • ошибки перезаписи.

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

Логические ошибки. Они могут быть результатом ошибок, допущенных при выборе метода, разработке алгоритма, определении структуры данных и кодировании блоков.

В эту группу входят:

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

Методы отладки программного обеспечения

Метод ручного тестирования

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

Метод индукции

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

Это процедура:

Важно, чтобы сформулированная гипотеза объясняла все проявления неисправности. Если удается объяснить только некоторые из них, то либо гипотеза ошибочна, либо в ней много ошибок.

Метод дедукции

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

Метод обратного прослеживания

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

Как выполняется отладка в современных IDE

Ранние программы отладки, такие как gdb, были отдельными программами с интерфейсом командной строки. Более поздние версии, например, ранние версии Turbo Debugger, были автономными, но имели собственный графический интерфейс для удобства использования. Большинство IDE теперь имеют встроенный отладчик. Он использует тот же интерфейс, что и редактор кода, поэтому отладку можно производить в том же интерфейсе, который используется для написания кода.

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

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

Шаг с заходом (step into)

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

Шаг с обходом (step over)

Эта инструкция также выполняет следующую инструкцию. Однако если step into вызывает функции и выполняет их построчно, то step over выполняет всю функцию без перерыва и возвращает управление после ее выполнения. Команду step over можно использовать для обхода функций, если программист уверен, что они уже были отлажены, или если он не заинтересован в их отладке в данный момент.

Шаг с выходом (step out)

В отличие от step into и step over, step out выполняет не следующую строку кода, а весь оставшийся код только что выполненной функции. После возврата из функции она возвращает управление программисту. Эта команда полезна, когда специалист случайно ввел функцию, которую не нужно отлаживать.

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

В некоторых отладчиках (например, GDB 7.0, Visual Studio Enterprise Edition 15.5 и более поздние версии) есть возможность вернуться назад. Это полезно, если цель была потеряна или если вам нужно повторно проверить выполненную команду.

Другие термины на букву «О»

Оцените статью
Uhistory.ru
Добавить комментарий