|
Я это делаю Персональное меню Голосование Поиск по сайту Реклама
Статистика |
Из-за чего возникают ошибки в программах? Чаще всего ошибки возникают из-за невнимательности. Чаще всего - в мелочах. Нужно было прибавить 1, а прибавили 2. Поставили точку с запятой после заголовка цикла - в результате тело цикла всегда обрабатывается ровно один раз. Нужно было найти модуль числа с плавающей точкой, а по невнимательности использовали функцию поиска модуля целого числа - в Си это приводит к округлению до ближайшего целого. Или присваивание вместо сравнения поставили. Или иногда сравнивают на точное равенство числа с плавающей точкой - чаще всего срабатывает правильно, но иногда может и проглючить. Почему - это вопрос второй (ответ на него Вы можете найти по ссылке в разделе «Смотрите также»). Как исправить - третий. Думаю, когда Вы поймёте, где ошибка и почему она возникает, на вопрос «Как исправить?» Вы и сами без труда найдёте ответ. Вопрос самый важный, первый, на который Вам нужно найти ответ: «как узнать, что ошибка именно здесь?» Для чего применяется отладка? Вы написали программу, а она не работает. Как найти ошибку? Просто сидеть и смотреть на неё - дело бесполезное. Мест, в которых можно допустить мелочную ошибку - миллион. Даже если Вы обратитесь к профессионалу, думаете, он окинет одним взглядом Вашу программу и сразу увидит все ошибки? Нет, дополнительный опыт даёт лишь незначительное повышение внимательности в опасных местах, потому что опытные люди обычно следят: «ага. Вот в этом месте я попутал присваивание со сравнением. Впредь буду обращать особое внимание на код, когда буду использовать сравнение.» Когда опытный человек будет писать новый код, он просто не допустит подобную ошибку, потому что он много раз её допускал. Хотя с лёгкостью может допустить эту, а тем более любую другую ошибку. И если опытный человек допустит ошибку в своей программе, то никакой опыт не поможет ему просто окинув программу взглядом, найти эту ошибку. Разве что только случайность может помочь. Как раз для поиска ошибок в программе и применяется отладка. Что такое отладка? Под фразой «Отлаживать программу» обычно понимают пошаговое выполнение программы, анализ хода выполнения программы и анализ значений важных переменных на каждом шаге работы программы. Это даёт Вам три важные возможности:
Отладка может дать также много другой полезной информации, например, Вы можете посмотреть стек вызовов и выяснить, что функция вызывается из какой-то другой, из которой, Вам раньше казалось, она вызываться ну никак не может. Но описанные выше три возможности - это фундаментальные возможности, которые помогут Вам найти до 90% всех ошибок в Вашей программе и сделать так, что на любых введённых Вами контрольных примерах Ваша программа будет работать правильно. В чём состоит суть отладки программы? В большинстве современных сред разработки есть специальные средства для отладки разрабатываемых программ. Эти средства позволяют выполнять программу пошагово, видеть откуда куда происходят переходы в программе и на каждом шаге смотреть значения нужных Вам переменных. Обычно для этого есть специальные клавиши, такие как «выполнить программу до строчки, в которой сейчас находится курсор», «выполнить одну строчку программы», «выполнить одну строчку программы, но если внутри этой строки есть вызов функции, то перейти внутрь этой функции». Обычно, если программа не запущена и Вы нажимаете одну из этих трёх клавиш, то программа запускается и её выполнение приостанавливается на первой строчке. Некоторые, кстати, забывают о клавише «выполнить программу до строчки, в которой сейчас находится курсор», думая, что это какая-то лишняя клавиша. Когда им нужно пройти цикл в 1000 шагов и посмотреть, что будет после цикла, они 1000 раз нажмут клавишу выполнения текущей строчки программы. Если, конечно, у них хватит терпения. Это делают обычно вместо того, чтобы один раз нажать более подходящую клавишу. Большинство отладчиков включают в себя возможности для установки контрольных точек (точек останова). Когда выполнение программы дойдёт до контрольной точки, то она остановится и Вы сможете посмотреть значения переменных или пошагово выполнить её дальше. Использовать контрольные точки удобно, например, если Вы программируете под Windows. Передача управления внутрь функций происходит по событиям Windows, таких функций много и Вы хотите узнать, какая же функция вызывается первой. В большинстве других случаев клавиши «выполнить до строчки, в которой сейчас находится курсор» должно быть достаточно. Обратите внимание, что в большинстве отладчиков есть два режима запуска программы: 1) с возможностью отладки и 2) без возможности отладки. Если Вы запускаете программу без возможности отладки, то программа будет выполняться без остановки на точках останова. Обратите внимание, что для того, чтобы выполнить программу с текущей точки и до конца иногда следует нажимать не ту же клавишу, которую Вы нажимаете для того, чтобы выполнить программу с начала до конца. Существуют среды, в которых нет встроенных отладчиков Хотя такие среды встречаются относительно редко, они всё же бывают. Например, у интерпретатора РНР нет встроенного отладчика, который работал бы по такой схеме, как я описал выше. Но есть множество сторонних отладчиков, которые позволяют так отлаживать РНР-скрипты. Также, Вы можете просто выводить на каждом шаге дополнительные сообщения на генерируемую страницу: «программа выполнилась в этой строчке» или «значение этой переменной в этом месте равно вот чему». Как узнать, есть ли в используемой мной среде программирования встроенный отладчик? Вообще говоря, нужно прочитать документацию. Найдите в документации раздел, посвящённый сочетаниям клавиш и поищите клавиши, которые выполняли бы те функции, о которых я писал выше. Поищите, как можно показать окно, в котором высвечиваются значения нужных Вам переменных. Если найдёте - значит, очевидно, в Вашей среде есть отладчик. Если не найдёте - то, значит, либо Вы плохо искали, либо в используемой Вами среде нет отладчика. Если отладчика нет, то Вы можете добавить в Вашу программу средства, чтобы она выводила Вам на экран интересующие Вас значения. Полагаю, что операторы вывода значений на экран Вам должны быть известны, так как самая простая из всех существующих программ, с которых обычно начинают изучение любых новых языков - программа “Hello, world!” - содержит в себе оператор вывода значения на экран. Юрий Попов, popoff.donetsk.ua Смотрите также
Что считать ошибкой?
Отладка РНР-скриптов
Как читать документацию
Неочевидные особенности вещественных чисел Последняя модификация: 01.11.07 09:27 Обсуждение статьи в форуме 13.12.06 10:37 maniac
IMHO, данный процесс назвается трассировкой. Отладка - более широкое понятие, включает еще дополнительные операции. 13.12.06 12:20 popoff В целом, согласен, что это ляп. На всякий случай залез в яндекс.словари:
13.12.06 13:15 maniac многие отладчики используются для reverse engineering (когда нет исходников) Просмотреть все комментарии в режиме форума. Всего комментариев: 3
|