Отладка в visual studio. Поиск логических ошибок в программе
Как было показано в предыдущем разделе на примере программы, преобразующей массив целых чисел, приложение может собираться и работать, но не выполнять полностью того, что ему полагается делать. Это означает, что текст программы не соответствует спецификации поставленной задачи и содержит логическую ошибку, а возможно, сразу и несколько логических ошибок.
Из всех категорий ошибок логические ошибки найти наиболее трудно, так как они берут свое начало в ошибочном рассуждении при поиске решения задачи. Такие ошибки обнаруживаются на этапе выполнения программы и приводят к неверным результатам, к остановке или «зависанию» приложения. Это делает необходимым тестирование приложения с различными наборами данных. Только тщательное тестирование на самых разнообразных значениях данных может дать на практике гарантию того, что приложение не содержит логических ошибок.
Самым простым способом локализации логической ошибки является пошаговое прослеживание результатов выполнения всех операторов программы. При отладке приложения в VS можно отображать значения указанных переменных или выражений в любой точке программы.
Вычисленные значения можно, сравнивать с теми, что должны быть, и если обнаруживается несоответствие, то, логическая ошибка локализована.
Начало сеанса отладки
Первый шаг отладки приложения – это выбор команды Start Debugging (F5) на стандартной панели инструментов или в меню Debug, после чего приложение запускается в режиме отладки.
Перед началом отладки целесообразно определить то место в программе, где возможна ошибка. Это, как правило, позволяет существенно сократить время, затрачиваемое на поиски ошибки. В примере 2 ошибка может содержаться в том фрагменте программы, который изменяет значения элементов массива после их ввода с клавиатуры.
Установка точек останова
Для того чтобы отладчик прерывал выполнение программы на определенной строке, необходимо установить на этой строке точку останова. Точка останова – это просто место (например, строка с оператором программы), которое помечено для отладчика и отображается красным кружком в поле индикаторов (узкое поле серого цвета с левого края окна редактора кода). Когда отладчик встречает точку останова, то выполняющаяся программа моментально останавливается (до выполнения данной строки кода).
Установить точку останова на какой-либо строке кода можно при помощи щелчка по полю индикаторов данной строки (рис. 16). Либо можно установить курсор на нужной строке и нажать клавишу F9.

Рисунок 16. Установка точки останова
Просмотр данных в отладчике
Когда выполнение программы в сеансе отладки приостановлено (например, при помощи точки останова), можно изучить состояние и содержимое ее переменных и объектов. Для этого в VS можно использовать три вида окон: Local (Локальные), Autos (Видимые) и Watch (Контрольные).
Доступ к окнам можно получить нажав Debug->Windows->выбрать нужное окно(Рис. 17)

Рисунок 17. Доступ к окнам
Окно Local показывает все переменные и их значения для текущей области видимости отладчика. Это дает вам представление обо всем, что имеется в текущей выполняющейся функции. Переменные в этом окне организованы в список и автоматически настраиваются отладчиком. На рис. 18 показан пример окна Local. С его помощью можно увидеть приложение нашего примера, которое приостановлено до обнуления соответствующих элементов массива. Обратите внимание, что объект (массив) a развернут для того, чтобы показать значения его элементов в момент остановки выполнения программы. По мере установки значений результаты будут отображаться в столбце Value.
Однако очень часто просмотр всех локальных переменных дает слишком много информации, чтобы в ней можно было разобраться. Так может происходить тогда, когда в области видимости данного процесса или функции находится слишком много операторов. Для того
чтобы увидеть значения, связанные с той строкой кода, на которую вы смотрите, можно использовать окно Autos. Это окно показывает значения всех переменных и выражений, имеющихся в текущей выполняющейся строке кода или в предыдущей строке кода. На рис. 19
показано окно Autos для той же самой строки кода, которая показана на рис. 18. Обратите внимание на разницу.
Окна Watch в VS позволяют настраивать собственный список переменных и выражений, за которыми нужно наблюдать (рис. 20). Окна Watch выглядят и ведут себя точно так же, как и окна Local и Autos. Кроме того, те элементы, которые вы размещаете в окнах Watch, сохраняются между сеансами отладки.

Рисунок 18. Окно Local

Рисунок 19. Окно Autos
Вы получаете доступ к окнам Watch из меню или панели инструментов Debug (рис. 17). Четыре окна Watch (которые называются Watch 1, Watch 2, Watch 3 и Watch 4) позволяют настроить четыре списка элементов, за которыми необходимо наблюдать. Эта возможность может быть особенно полезна в том случае, когда каждый список относится к отдельной области видимости вашего приложения.
Переменную или выражение в окно Watch 1 можно добавить из редактора кода. Для этого в редакторе кода выделите переменную (или выражение), щелкните по ней правой кнопкой мыши и выберите пункт Add Watch. При этом выделенная переменная (или выражение) будет помещена в окно Watch 1. Вы можете также перетащить выделенный элемент в это окно.

Рисунок 20. Окно Watch 1
Пошаговое прохождение для поиска ошибки
После того как в нашем примере отладчик, встретив точку останова, прервал выполнение программы, далее можно выполнять код по шагам (режим трассировки). Для этого можно выбрать команду Step into на панели инструментов Debug или нажать функциональную клавишу F11(Рис. 21). Это приведет к последовательному выполнению кода по одной строке, что позволит вам видеть одновременно и ход выполнения приложения, и состояние объектов программы по мере выполнения кода. Команда Step into (F11) позволяет продвигаться по коду по одной строке. Вызов этой команды выполнит текущую строку кода и поместит курсор на следующую выполняемую строку. Важное различие между Step into и другими похожими командами состоит в
том, как Step into обрабатывает строки кода, в которых содержатся вызовы функций. Если вы находитесь на строке кода, которая вызывает другую функцию программы, то выполнение команды Step into перенесет вас на первую строку этой функции.
Если сделать так в нашем примере, то вы увидите ошибку: обнуление элементов массива должно начинаться не с элемента с индексом i1, а со следующего элемента i1+1.
Команда Step out (F10) позволяет вам сохранять фокус в текущей функции (не заходя в вызываемые ею подпрограммы), т. е. вызов Run out приведет к выполнению строки за строкой, но не заведет вас в вызовы функций и при этом следующей выполняемой
строкой для пошагового прохождения станет следующая за вызовом функции строка.

Рис 21. Команда Step Into
Одной из более удобных (и часто упускаемых) функциональных возможностей набора инструментов отладки является функция Run to cursor ( Выполнить до текущей позиции). Она работает в полном соответствии со своим названием. Вы устанавливаете курсор на некий код и вызываете эту команду. Приложение компилируется и выполняется до тех пор, пока не доходит до той строки, где находится курсор. В этой точке отладчик прерывает приложение и выдает вам эту строку кода для пошагового прохождения. Рис. 22.

Рисунок 22. Вызов команды Run To Cursor
Продолжить отладку после точки останова можно повторным нажатием на кнопку F5 (Start Debugging).

Рисунок 23. Результат работы программы после исправления ошибки
Рассмотрим пошаговое выполнение программы с использованием окна Watch на простейшем примере.
Поиск и исправление логических ошибок в программе или коде HTML
![]()
Поиск и исправление ошибок в программе — это интересная и необычная задача. Некоторые ошибки найти и исправить несложно. А для других до сих пор конкретных алгоритмов не придумали, поэтому приходится ограничиться лишь обобщенными решениями, следовани е которым облегчит ваш поиск и сделает вашу программу функциональной и эффективной.
Поиск и исправление ошибок в программе
-
Синтаксические — ошибки, которые допускаются в результате невнимательности программистов: неправильно выбран оператор, пропущена буква или символ, лишние буква, символ, оператор и т. п.
-
Логические — ошибки, которые возникают от неправильного выполнения скрипта или части кода. Такие ошибки могут привести к критическим ситуациям, когда становится невозможн ой дальнейшая работа или модернизация программы. Как правило, эта категория ошибок очень трудно обнаруживается.
Синтаксические ошибки
-
н аходите нужный валидатор,
-
находите при помощи него синтаксические ошибки,
-
исправляете ошибки.
Логические ошибки
-
Всегда записывайте ошибку в блокнот или трекер. Как только заметили логическую ошибку в программе, нужно записать ее в трекер. Потому что вы не знаете , сколько уйдет времени и сил на поиск такой ошибки. А в процессе поиска может произойти все что угодно и вы просто можете забыть какие-то важные детали о самой ошибке.
-
«Ок, Google!». Если вы нашли ошибку, то есть шанс, что она не уникальна и кто-то с ней уже сталкивался. А это значит, что вполне вероятно, что у кого-то уже есть решение этой проблемы. Поэтому попробуйте найти ее решение в сети.
-
Ищите строку! Если поиск в сети не дал результатов, то запустите программу в отладчике и попробуйте найти строку кода, где возникает ошибка. Это , скорее всего , не решит проблему, но даст вам хоть какое-то представление о ней и позволит продолжить дальнейшие поиски.
-
Найдите точную строку! Отладчик вам выдаст строку с багом, но , скорее всего , причина будет не в этой строке. Чаще всего причина возникает в данных, которые получила эта строка с багом. Поэтому нужно провести более тщательный анализ и найти причину и природу возникновения ошибки. Ошибки могут происходить по-разным причинам, поэтому это т процесс будет не самым простым и легким.
-
Исключайте. Может так случиться, что сразу найти нужную строку кода не получится. В таком случае нужно выявить «проблемный» блок кода. Для этого нужно постепенно отключать компоненты программы, пока не будет выявлен «проблемный» компонент.
-
Нужно исключить проблему в аппаратном обеспечении. Редкий случай, но бывает так, что проблема с «железом» вызывает ошибки с исследуемой программой. Можно обновить операционную систему, среду разработк и , заменить оперативную память и т. д.
-
Ищите совпадения. Когда возникают ошибки в программе? В одно и то же время? В одном и том же месте? Что обще го у пользователей, у которых возника ю т ошибки? Задавайте подобные вопросы и ищите взаимосвязь. Это м ожет натолкнуть вас на поиск самой проблемы.
-
Обратитесь за помощью. Не стесняйтесь спрашивать у более опытных коллег, что может быть не так с вашей программой? Как найти ошибки в ко д е и как их исправить? Ведь проблема может быть в чем угодно, а поиски решения могут занять долгое время. А с вами рядом всегда могут оказаться те, к то сможет помочь.
Заключение
Поиск и исправление логических ошибок в программе иногда становится очень стрессовой задачей. Поэтому в первую очередь никогда не нужно паниковать, если ваша программа работает не так , как надо. Не нужно сразу обвинять всех подряд или себя в том , что такая ошибка возникла.
Иногда логические ошибки действительно возникают по стечению обстоятельств и чисто случайно, поэтому только ваш и спокойствие и размеренность помо гут их обнаружить.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
при помощи чего выявляются логические ошибки в программе
Логические ошибки могут происходить как в компиляторах, так и в интерпретаторах. В отличие от синтаксических ошибок, программы с логическим изъяном являются правильными программами, хотя в большинстве случаев ведут себя не так, как задумано первоначально.
Существование данного вида ошибок связано с неправильными действиями на этапе принятия решений.
Связанные понятия
Опера́тор ветвле́ния (усло́вная инстру́кция, усло́вный опера́тор) — оператор, конструкция языка программирования, обеспечивающая выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения, либо выполнение одной из нескольких команд (наборов команд) в зависимости от значения некоторого выражения.
Упоминания в литературе
Связанные понятия (продолжение)
В области математики и теории информации линейный код — это важный тип блокового кода, использующийся в схемах определения и коррекции ошибок. Линейные коды, по сравнению с другими кодами, позволяют реализовывать более эффективные алгоритмы кодирования и декодирования информации.
В приведённой ниже таблице отмечено наличие или отсутствие тех или иных возможностей в некоторых популярных сегодня языках программирования. Столбцы упорядочены по алфавиту. Если возможность в языке недоступна напрямую, но может быть эмулирована с помощью других средств, то в таблице отмечено, что её нет.
Криптографические хеш-функции — это выделенный класс хеш-функций, который имеет определенные свойства, делающие его пригодным для использования в криптографии.
Поиск и исправление логических ошибок в программе или коде HTML
![]()
Поиск и исправление ошибок в программе — это интересная и необычная задача. Некоторые ошибки найти и исправить несложно. А для других до сих пор конкретных алгоритмов не придумали, поэтому приходится ограничиться лишь обобщенными решениями, следовани е которым облегчит ваш поиск и сделает вашу программу функциональной и эффективной.
Поиск и исправление ошибок в программе
Для того, чтобы правильно найти и исправить ошибку в коде программы, нужно понимать, что существует всего 2 вида таких ошибок:
Синтаксические — ошибки, которые допускаются в результате невнимательности программистов: неправильно выбран оператор, пропущена буква или символ, лишние буква, символ, оператор и т. п.
Логические — ошибки, которые возникают от неправильного выполнения скрипта или части кода. Такие ошибки могут привести к критическим ситуациям, когда становится невозможн ой дальнейшая работа или модернизация программы. Как правило, эта категория ошибок очень трудно обнаруживается.
Синтаксические ошибки
Данный вид ошибок также иногда очень критично влия е т на работу программы и может привести к тому, что программа не сможет запуститься. Но такие ошибки найти и исправить довольно просто. Для этого используют специальные сервисы или программы — валидаторы.
Очень часто такой вид ошибок связан с кодом HTML. Потому что очень важно, чтобы код HTML вашего ресурса был валидным, так как от этого напрямую зависит качество его индексации. Об этом неоднократно заявляли представители компании Гугл.
Вопрос: «Как найти ошибки кода HTML?» решается за пять минут. В сети очень много валидаторов кода HTML — найдите себе подходящий и используйте. К примеру, самым известным из них является «Валидатор от W3C». Данный ресурс предостави т список ошибок HTML с инструкциями и описанием. Вам останется только их исправить — и все будет хорошо.
Таким же образом проверяются синтаксические ошибки CSS и JavaScript:
н аходите нужный валидатор,
находите при помощи него синтаксические ошибки,
Логические ошибки
С логическим ошибками все куда сложнее. Специальных сервисов для этого нет, поэтому приходится ограничиваться лишь общими советами, которые помогут провести поиск и исправление логических ошибок в программе.
«Ок, Google!». Если вы нашли ошибку, то есть шанс, что она не уникальна и кто-то с ней уже сталкивался. А это значит, что вполне вероятно, что у кого-то уже есть решение этой проблемы. Поэтому попробуйте найти ее решение в сети.
Исключайте. Может так случиться, что сразу найти нужную строку кода не получится. В таком случае нужно выявить «проблемный» блок кода. Для этого нужно постепенно отключать компоненты программы, пока не будет выявлен «проблемный» компонент.
Ищите совпадения. Когда возникают ошибки в программе? В одно и то же время? В одном и том же месте? Что обще го у пользователей, у которых возника ю т ошибки? Задавайте подобные вопросы и ищите взаимосвязь. Это м ожет натолкнуть вас на поиск самой проблемы.
Обратитесь за помощью. Не стесняйтесь спрашивать у более опытных коллег, что может быть не так с вашей программой? Как найти ошибки в ко д е и как их исправить? Ведь проблема может быть в чем угодно, а поиски решения могут занять долгое время. А с вами рядом всегда могут оказаться те, к то сможет помочь.
Заключение
Иногда логические ошибки действительно возникают по стечению обстоятельств и чисто случайно, поэтому только ваш и спокойствие и размеренность помо гут их обнаружить.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Отладка программы
Термин «отладка» означает исправление ошибок в программе и обеспечение ее правильной работы. Возникающие в процессе создания программы ошибки классифицируются следующим образом:
1. Синтаксические ошибки.
2. Ошибки периода выполнения программы.
3. Логические ошибки.
Delphi позволяет легко найти и исправить ошибки, возникающие как во время компиляции (синтаксические ошибки), так и во время выполнения. В состав интегрированной среды разработчика Delphi входит мощный и гибкий отладчик, который позволяет построчно выполнять программу, анализируя при этом выражения и модифицируя значения переменных. Этот отладчик встроен в среду Delphi, благодаря чему можно редактировать, компилировать и отлаживать программы не выходя из Delphi.
Синтаксические ошибки
Ошибки на этапе компиляции (или синтаксические ошибки) возникают в том случае, если не описана переменная, передается неправильное количество параметров подпрограмме, не совпадают типы переменной и выражения в операторе присваивания, операторы не удовлетворяют требованиям языка Object Pascal и т.п.
Object Pascal имеет строгие правила по сравнению с другими языками, поэтому, исправив синтаксические ошибки, можно считать выполненной основную часть отладки.
На рисунке 4.1 изображено окно редактора кода в тот момент, когда программа была запущена на компиляцию и компилятор обнаружил синтаксические ошибки. Напомним, что запуск на компиляцию и выполнение программы осуществляется командой Выполнить/Выполнить (функциональная клавиша F9), а запуск программы только на компиляцию можно осуществить при помощи команды Проект/Компилировать < имя файла проекта > (комбинация клавиш Ctrl+F9). В нижней части редактора кода содержатся сообщения об ошибках. Сообщение начинается словом [Ошибка], заключенным в квадратные скобки, далее идет имя файла проекта, затем в круглых скобках указывается номер строки программы, где была допущена ошибка и, в заключение, после двоеточия идет текст, поясняющий смысл допущенной ошибки.

Рисунок 4.1 — Сообщение компилятора о синтаксической ошибке
Исправление ошибок следует начинать с первой, поскольку часто одна ошибка является причиной появления других ошибок. Исправив первую ошибку, следует снова запустить программу на компиляцию. Во многих случаях исправление только одной ошибки существенно уменьшает общее количество сообщений об ошибках.
Ошибки периода выполнения программы
Другой возможный тип ошибок — это ошибки этапа выполнения (или семантические ошибки). Это происходит в том случае, если транслируется корректная программа, а затем при ее выполнении предпринимается попытка выполнить недопустимое действие, например, открыть несуществующий файл для ввода или выполнить деление на 0. В этом случае Delphi генерирует так называемое исключение (Exception) — рисунок 4.2.

Рисунок 4.2 — Сообщение о сгенерированном исключении
Сообщение, содержащееся в этом окне, информирует, что произошло деление на ноль, и выполнение программы приостановлено. Нажатие кнопки OK прерывает выполнение программы. Открывается окно редактора кода, в котором строка, содержащая ошибку, будет выделена синей полосой (рисунок 4.3).

Рисунок 4.3 — Строка кода, содержащая ошибку периода выполнения
Логические ошибки
Программа, содержит логические ошибки, если реализованный в ней алгоритм является неправильным. В этом случае программа работает, выдает результат, но этот результат неверен. Такое происходит если, например, в программе неправильно записана формула либо при поиске максимума из трех чисел сравнили между собой только два числа. Для поиска и устранения логических ошибок необходимо использовать тесты, — решенные каким-либо образом задачи, имеющие правильный ответ.
В больших и сложных программах логические ошибки и ошибки периода выполнения достаточно трудно отследить и обнаружить. В этих случаях вполне естественным является желание выполнить программу в интерактивном режиме, наблюдая за изменениями значений отдельных переменных или выражений. При этом желательно иметь возможность останавливаться в определенном месте программы и смотреть, что там происходит. Часто бывает полезно изменять значения некоторых переменных при выполнении программы. Это позволит повлиять на ее поведение и увидеть, в какую сторону оно изменилось. Все эти возможности наряду с другими средствами предоставляет отладчик Delphi, являющийся составной частью интегрированной среды разработки.
Интегрированная среда Delphi предоставляет пользователю несколько команд пошаговой отладки доступных в меню Выполнить (рисунок 4.4).

Рисунок 4.4 — Команды отладки
В Delphi имеется два режима трассировки — без захода в подпрограмму и с заходом в неё.
Если необходимо выполнить трассировку части программы, то следует установить в редакторе кода указатель на тот оператор, с которого следует начать трассировку, и выполнить команду Выполнить/Выполнять до Курсора (функциональная клавиша F4). Затем можно продолжить трассировку, нажимая клавиши F7 или F8.
Кроме того, при отладке программы можно использовать точки останова программы. Это строки программы, помеченные особым образом. При достижении такой строки программа приостанавливает свою работу. В этот момент можно просмотреть значения наблюдаемых переменных или начать трассировку программы.
Для внесения новой точки останова выполняется команда Выполнить/Добавить Точку Останова или нажатие функциональной клавиши F5.