Отладка программы. Отладка программ с использованием отладчика

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

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

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

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

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

Способы отладки программ .

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


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

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

1. Пошаговая отладка программ с заходом в подпрограммы;

2. Пошаговая отладка программ с выполнением подпрограммы как одного оператора;

3. Выполнение программы до точки останова.

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

Если в программе имеются уже отлаженные подпрограммы, то подпрограмму можно рассматривать, как один оператор программы и воспользоваться вторым способом отладки программ.

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

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

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

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

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

Очистка от мусора
Кликаем по кнопке «Пуск» и переходим< все программы> стандартные>служебные>очистка диска(фото) , в открывшемся окошке нажимаем «ОК».

По окончании анализа будет предложено произвести очистку папок

выбор папок для очистки

Жмём «ОК»

Дефрагментация

Выполняем предыдущую процедуру < все программы> стандартные> служебные> Дефрагментация

Дефрагментация дисков-анализ

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

Зайдите в «Пуск» нажмите «Выполнить», в открывшемся окне введите команду msconfig и нажмите «ОК». В открывшемся окне перейдите на закладку «Автозагрузка». Убираем здесь все галочки с ненужных программ, обязательно оставьте «ctfmon» и конечно же свой антивирус. Жмем потом «Применить», далее «Ок» и «Перезагрузка». После перезагрузки компьютера поставьте галочку, чтобы Вам не напоминали о внесенных вами изменениях.

Проведенные операции несколько улучшат состояние ПК, но не на много. Для значительного улучшения необходимо воспользоваться специализированными программами, такими как WiseCare365 , Cclenar 301 или другими. Я пользуюсь сборкой «Total Commander 7.04а» , в ней имеются встроенные свободные версии Wise Disk Cleaner , Wise Registry Cleaner и управление автозагрузкой.

Панель инструментов Total Commander-7.04а.

Простой и понятный интерфейс программ не составит труда разобраться.

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

Что же касается проблем с «железом», то после очистки компьютера возможно освободиться значительное пространство на дисках и оперативной памяти и с заменой их можно повременить.

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

Вирусы .
Вирусы тоже довольно сильно замедляют работу компьютера. Просканируйте систему, если нужно скачайте на сайте drweb.com бесплатную утилиту Dr.Web CureIt и просканируйте компьютер.

Блок питания
Еще одна возможная причина такого поведения компьютера неисправность блока питания. Возможно из-за просаженных напряжений 3,3в, 5в, 12. Вот есть инфа.

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

  • узнавать текущие значения переменных ;
  • выяснять, по какому пути выполнялась программа.

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

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

Энциклопедичный YouTube

    1 / 3

    Без этого вы не станете программистом! Найти ошибку в коде. Отладка. Как пользоваться отладчиком #23

    Основы Java. Урок 16: Отладка программы в Eclipse

    Основы программирования - создание и отладка первой программы. Урок 2.

    Субтитры

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

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

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

Инструменты

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

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

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

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

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

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

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

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

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

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

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

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

  • Контрактное программирование - чтобы программист подтверждал другим путём, что ему на выходе нужно именно такое поведение программы. В языках, в которых контрактного программирования нет, используется самопроверка программы в ключевых точках.
  • Безопасность программного кода и отладка

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

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

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

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

Введение 2

Определение программирования. Этапы создания программы 3

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

Задача 2 и 3 9

Задача 4 и 5 12

Заключение 14

Список используемой литературы 15

Введение

Компьютерная техника и компьютерная технология прочно вошли в человеческую жизнь. Развитие научно-технического прогресса невозможно без автоматизации вычислительных процессов. Именно потребность в автоматизации вычислительных процессов стала первоначальным импульсом в развитии программирования.

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

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

Для создания программы появляется необходимость придерживаться определенных принципов и новых технологий программирования.

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

Определение программирования. Этапы создания программы

Чтобы компьютер выполнил решение, какой либо задачи ему необходимо получить от человека инструкцию, как ее решать, набор таких инструкций для компьютера, направленной на решение какой-либо задачи называется – программой.

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

Язык программирования – формальная знаковая система, предназначенная для записи программ. Со времени создания первых программируемых машин человечество придумало уже более восьми с половиной тысяч языков программирования. Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.

В процессе создания любой программы можно выделить следующую последовательность этапов:

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

2 этап. Анализ задачи и моделирования: целью этого этапа является математическая модель или математическая постановка. На этом этапе выполняются следующие пункты

1) Определяются исходные данные и их типы.

2) Решение задачи описывается в виде аналитических зависимостей (уравнения, функции).

3) Определяются конечные данные и их типы.

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

3 этап. Алгоритмизация задачи и составление блок-схемы: выполняется на основе математического описания программы. На данном этапе составляется алгоритм решения задачи согласно действиям, задаваемым выбранным методом решения. Процесс обработки данных разбивается на отдельные относительно самостоятельные блоки, и устанавливается последовательность выполнения блоков. Разрабатывается блок-схема алгоритма.

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

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

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

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

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

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

Отладка – это деятельность, направленная на обнаружение и исправление ошибок в программе.

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

Отладка = Тестирование + Поиск ошибок + Редактирование.

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

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

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

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

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

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

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

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

  • Паскаль Отладка программ

    Реферат >> Информатика

    Логические операторы и операторы цикла. Отладка программ . Укороченная форма оператора if В... if. Средства среды программирования для отладки программ Среда Borland Pascal ... несколько встроенных инструментальных средств отладки программ . С некоторыми из них...

  • Программа по начислению заработной платы и налогов работникам фирмы

    Реферат >> Экономика

    Программного обеспечения: изучение постановки задачи; программирование и отладка программ ; описание контрольного примера; совместно с... машинного времени при отладке программы определяются путем умножения фактического времени отладки программы на цену...

  • Выполнение и отладка программ в интегрированной среде программирования Turbo Pascal (MS-Dos)

    Лабораторная работа >> Информатика, программирование

    Практического использования интегрированных сред программирования с целью выполнения и отладки программ на языке Паскаль. ТЕОРЕТИЧЕСКИЕ... СВЕДЕНИЯ Базовыми компонентами системы программирования Турбо...

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

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

    1. Синтаксическая ошибка . Неправильное употребление синтаксических конструкций, например употребление оператора цикла For без то или Next.
    2. Семантическая ошибка . Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам.
    3. Логическая ошибка . Нарушение логики программы, приводящее к неверному результату. Это наиболее трудный для "отлова" тип ошибки, ибо подобного рода ошибки, как правило, кроются в алгоритмах и требуют тщательного анализа и всестороннего тестирования.

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

    В каждой современной системе программирования существует специальное средство отладки программ - отладчик (debugger), который позволяет в режиме интерпретации установить контрольные точки, выполнить отдельные участки программы и посмотреть результаты работы операторов. Естественно, что редактор Visual Basic имеет подобное средство, с которым мы сейчас и познакомимся. В вышеописанной программе мы специально допустили ошибки, на примере которых и продемонстрируем работу отладчика VBA.

    Замечание

    Все ошибки располагаются в процедуре AssignTask, так что перед началом отладки вы можете проверить себя и попытаться отыскать их самостоятельно.

    Первый шаг отладки - это запуск компилятора: Debug > compile <имяПроекта>. Компилятор, просматривая код программы, найдет ошибку и выдаст сообщение: sub or Function not defined (Процедура или функция не определены), выделив место ошибки (creatitem) в теле процедуры.

    Итак, допущена синтаксическая ошибка, мы сделали опечатку (вместо createitem ввели creatitem), и компилятор стал расценивать это как вызов процедуры пользователя, которая нигде не объявлена. Быстро исправим эту оплошность, добавив злополучную е в код:

    Set tsk = Createltem(olTaskltem)

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

    Замечание

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

    Запуск программы в VBA осуществляется разными способами. Уже упоминалась возможность запуска программы посредством нажатия клавиши или с помощью команды Run Sub\UserForm меню Run. Однако при таком вызове запускается активная процедура, т. е. процедура, в которой находится курсор. Другим Способом является вызов диалогового окна Macros из меню Tools. В этом окне можно выбрать запускаемую процедуру, не делая ее активной.

    Итак, мы запустили программу. Что же происходит? Сразу после запуска появляется диалоговое ОКНО об ошибке: Object variable or With block variable not set (объектная переменная или переменная блока with не определена) и четыре варианта продолжения работы с программой (рис. 22.6):

    1. Continue. Продолжить выполнение программы.
    2. End. Закончить выполнение программы.
    3. Debug. Прервать выполнение программы и перейти в режим отладки.
    4. Help. Вывести подробную справку об ошибке.

    Замечание

    Хотя в данном случае кнопка Continue не активна, она бывает очень полезна в ряде случаев. Например, при прерывании хода программы комбинацией клавиш + только для проверки контрольных значений в окне Immediate, когда нет необходимости переходить в режим отладки, если все значения удовлетворительны. Кнопка End используется для окончательного прерывания хода программы, как правило, когда ошибка сразу видна и не требует отладочных средств.

    Рис. 22.6. Диалоговое окно Run-time error "91"

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

    В нашем же случае произошла семантическая ошибка: неправильное присваивание переменной значения ссылки на объект. Для устранения этой ошибки необходимо добавить оператор присваивания set перед переменной tsk. Давайте еще раз запустим программу. На этот раз она успешно завершилась, дойдя до конца и выдав сообщение "Задача успешно поручена".

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

    Как видите, все параметры верны, кроме загадочного срока окончания задачи, который истекает через 5 дней, в то время как в диалоговом окне продолжительность проекта была равна 5 месяцам!!!

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

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

    Рис. 22.7.

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

    Чтобы создать точку останова, следует в отлаживаемой процедуре установить точку ввода в любом месте строки кода VBA, перед выполнением которой вы хотите остановить выполнение процедуры. Затем нужно выбрать команду > Debug > Toggle Breakpoint или просто нажать клавишу . При этом строка будет выделена коричневым цветом, а на левом поле окна кода появится жирная коричневая точка. Для снятия точки останова нужно еще раз повторить те же действия. Если напротив оператора стоит точка ос танова, это означает, что выполнение программы будет приостановлено перед выполнением этого оператора.

    Замечание

    Есть и более простой и, на наш взгляд, естественный способ установки точек останова: достаточно просто сделать щелчок мышью по серой полоске у левого края соответствующей строки кода. Снять эту точку можно повторным щелчком по жирной коричневой точке. Наконец, если вы хотите снять все ранее поставленные точки останова, вовсе необязательно снимать все эти точки поодиночке. Достаточно воспользоваться командой меню > Debug > Clear All Breakpoints.

    Наши подозрения вызвали следующие места программы, в которых мы и расставили точки останова (рис. 22.8).

    • Инициализация переменной tsk (чему равняется значение по умолчанию).
    • Вызов стандартной функции NOW (действительно ли возвращается текущее время).
    • Установка даты окончания задачи (правильно ли происходит суммирование).

    После расстановки точек останова необходимо, как было сказано, указать, значения каких переменных мы хотели бы наблюдать. Естественно, что мы выбрали значения полей tsk.startoate и tsk.DueDate. Для наблюдения за несколькими свойствами или переменными существуют специальные окна Locals Window и Watch Window. Эти окна можно открыть с помощью соответствующих кнопок на панели Debug или команд меню View.

    В окне локальных переменных можно наблюдать за значением всех локальных переменных выполняемой в данный момент процедуры, а окно контрольных значений предназначено для постоянного наблюдения за выбранными пользователем переменными или свойствами. Чтобы определить контрольное значение, достаточно выделить в окне модуля любую переменную, выражение или свойство и нажать кнопку Quick Watch на панели инструментов Debug. При этом появится диалоговое окно, в котором указано имя подпрограммы, само выражение, а также его текущее значение (рис. 22.8).

    Нажав на расположенную в правой части диалогового окна кнопку Add, можно переместить это выражение в список наблюдаемых контрольных значений в окне Watch. При этом в момент останова отлаживаемой программы весь список наблюдаемых выражений и их значения будут сразу же видны в соответствующем подокне, располагающемся обычно в нижней части экрана. Добавим переменную tsk. star toate вышеописанным способом. Чтобы наблюдать значение переменной, необходимо выполнить следующее действие.

    Рис. 22.8. Точки останова и диалоговое окно Quick Watch

    Пример 22.8. Добавление переменной в окно Add Watch

    {В окне Watch}

    1R Add Watch... (рис. 22.9)

    Expression:= tsk.StartDate

    Procedure AssignTask

    Итак, точки останова расставлены, окно Add Watch с наблюдаемыми переменными активно, следовательно, с замиранием сердца переходим к трассировке программы. Итак, нажимаем клавишу , как и предполагалось, перед инициализацией переменной происходит останов программы. Все правильно. Теперь давайте посмотрим, как изменились значения переменных В окне Add Watch: tsk.StartDate = 01:01:4501, tsk.StartDate = 01:01:4501, a duration = 5.

    Рис. 22.9. Диалоговое окно Add Watch

    Для единичного просмотра значения переменной можно просто подвести к ней указатель мыши, и вы увидите всплывающую подсказку. Например, duration = 5.

    Для дальнейшего пошагового выполнения программы можно воспользоваться одним из трех способов:

    1. Step Into. При нажатии клавиши выполняется очередной оператор, после чего выполнение программы приостанавливается и программа становится доступна для корректировки.
    2. Step Over. Нажатие комбинации клавиш + осуществляет вызов вспомогательных процедур и функций за один шаг, что дает возможность не задерживаться на их выполнении.
    3. Step Out. Данная комбинация клавиш ++ позволяет выйти из выполняемой вспомогательной процедуры, не дожидаясь конца ее пошагового выполнения.

    Итак, нам необходимо нажать клавишу и посмотреть, чему стало равно значение tsk.startDate. Как и следовало ожидать, переменной было присвоено значение 21.08.01. (текущая дата 21 августа 2001 года). Следовательно, функция Now работает корректно.

    Значение переменной duration равно 5, прибавляя его к значению текущей даты, мы прибавляем не месяцы (как хотелось бы), а дни. Исправим эту ошибку, изменив код ошибочной строки на следующий:

    DueDate = DateAdd("m", duration, .StartDate)

    Замечание

    Встроенная функция DateAdd предназначена для добавления или вычитания из даты указанного числа временных интервалов.

    В конце рассказа об отладчике мы решили на рис. 22.10 показать панель инструментов Отладка (Debug) с кнопками, используемыми при отладке, а в табл. 22.1 привести краткую справку по всем использованным и неиспользованным средствам отладчика.

    Рис. 22.10. Кнопки панели Отладка

    Команда Назначение
    Compile Компиляция программы
    Run Sub/UserForm Запуск процедуры или формы
    Break Прерывание выполнения программы +
    Reset Остановка выполнения программы
    Toggle Breakpoints Установить точку останова
    Clear All Breakpoints Снять все точки останова
    Step Into Шаг с заходом во вспомогательные процедуры
    Step Over Шаг с обходом вспомогательных процедур
    Step Out Шаг с выходом из вспомогательной процедуры
    Step to Cursor Шаг до курсора. Запускает программу на выполнение до строки с курсором
    Set Next Statement Позволяет устанавливать следующий выполняемый оператор
    Show Next Statement Показывает следующий выполняемый оператор
    Immediate Window Отображает окно отладочных результатов вычисления
    Locals Window Отображает окно локальных переменных процедуры
    Watch Window Отображает окно контрольных выражений программы
    Add Watch Добавляет выражение в окно Watch
    Edit Watch Исправляет выражение в окне Watch
    Quick Watch Просматривает значение выделенного выражения
    Call Stack Позволяет показать стек вызовов процедур в текущий момент. Эта кнопка очень полезна при работе с рекурсивными процедурами
    Comment Block Позволяет закомментировать выделенный блок операторов
    Uncomment Block Отменяет сделанные комментарии
    Toggle Bookmarks Устанавливает закладку
    Clear All Bookmarks Снимает все установленные закладки
    Find Вызывает диалоговое" окно поиска, посредством которого можно найти ту или иную переменную, выражение и т. д.

    Таблица 22.1. Средства отладчика

    К сожалению, не все приемы отладки можно рассмотреть на нашем простейшем примере.