АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Теоретические сведения. Тема: Интегрированный отладчик Microsoft Visual C++ 6.0

Читайте также:
  1. III. ИСТОРИКО-ЛИТЕРАТУРНЫЕ И ТЕОРЕТИЧЕСКИЕ ПОНЯТИЯ
  2. WWW и Интернет. Основные сведения об интернете. Сервисы интернета.
  3. А) Теоретические основы термической деаэрации
  4. А. Общие сведения
  5. А. Общие сведения
  6. А. Общие сведения
  7. А. Общие сведения
  8. А. Общие сведения
  9. Вопрос №19 Экономическая система: сущность, элементы, теоретические концепции.
  10. Вопрос. Локальные и глобальные сети ЭВМ. Основы компьютерных коммуникаций. Общие сведения об internet. Основные службы internet. Электронная почта.
  11. ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ
  12. Глава. Теоретические аспекты семейного воспитания.

Лабораторная работа № 1.

Тема: Интегрированный отладчик Microsoft Visual C++ 6.0

Цель работы. Изучить и освоить возможности и основные приемы работы с отладчиком.

Теоретические сведения

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

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

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

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

· Синтаксические или времени компиляции. Ошибки, возникающие во время компиляции.

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

· Времени выполнения. Ошибки, возникающие при выполнении программы.

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

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

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

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

Компилятор Visual C++ может сообщать об объявлениях переменных, которые никогда не используются, и о чтении значения переменной до ее инициализации. Он может даже определить, что логический поток управления вашей программы не допускает исполнения некоторых сегментов кода, - в этом случае компилятор сообщает о «недостижимом коде».

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

Например, функция socket объявляется в файле <WinSock2.h>, и для правильной компиляции программы требует препроцессорной директивы #include <WinSock2.h>. Однако такая программа все равно не будет компоноваться без ошибок, потому что компоновщик не подключает сетевую библиотеку автоматически. Нужно явным образом дать ему такое указание (рис. 1.1.), либо добавив файл библиотеки Ws2_32.lib в проект, либо указав в настройках проекта (Project->Settings, вкладка Link):

На этом рисунке в окне ввода Object/Library modules виден список используемых приложением библиотек, и Ws2_32.lib, добавленная нами.

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

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

Ошибки времени выполнения включают в себя следующее.

· Аппаратно детектируемые ошибки, такие как деление на ноль, арифметическое переполнение, нарушение защиты памяти и ошибки устройств.

· Системные ошибки, например, неудачная файловая операция или переполнение очереди сообщений.

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

· Исключения или ошибки, специфичные для приложения, такие как неверный формат ввода.

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

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

Отыскивать такие ошибки проще всего с помощью символического отладчика. Отладчик Microsoft Visual C++ позволяет вам проследить выполнение программы, исполняя ее по одному оператору (пошагово), пока не встретится оператор, генерирующий ошибку. Как только ошибка идентифицирована, ее нужно исправить, заменив некорректный оператор корректным, а затем заново компилировать, компоновать и запустить программу на выполнение.

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

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

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

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

Расшифровка сообщений об ошибках. Когда вы компилируете и компонуете программу в Visual C++, автоматически открывается окно Output, отображающее информацию о статусе процесса построения, включая все предупреждения и сообщения об ошибках. Это окно может помочь вам найти и исправить причины сообщения об ошибке двумя способами:

· автоматически проследив строку кода, генерировавшую сообщение,

· отобразив страницу контекстно-зависимой справки, содержащей дополнительную информацию о данном сообщении.

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

Чтобы получить справку о данном сообщении, нужно сначала щелкнуть на номере сообщения в окне Output (например, С2001) а затем нажать клавишу F1. В окне Help откроется страница справочника, соответствующая выбранному номеру ошибки.

Часто в этих справочных файлах приводится объяснение ошибки в синтаксисе или логике, которое помогает исправить ошибочный оператор.

 


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)