Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  Прочее  /  Отладка автономных программ

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

Презентация использовалась на занятиях профессионального модуля в ОПК СТИ НИТУ МИСиС

21.12.2017

Содержимое разработки

Тема 10 . Компиляция и отладка программ. Технология .NET Лекция 10 . 1  Отладка автономных программ

Тема 10 .

Компиляция и отладка программ. Технология .NET

Лекция 10 . 1

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

Основная: Павловская Т.А. C #. Программирование на языке высокого уровня. Учеб. для вузов. – СПб: Питер, 2008 – 432 с. Павловская Т.А., Щупако Ю.А. C / C ++. Структурное программирование, Питер, 2005. – 402 с.  Дополнительная: Гросс К. С# 2008: Пер. с. анг. – СПб. БХВ-Петербург, 2009. – 576 с. Троелсен Э. Язык программирования С# 2005 и платформа /NET 2.0:пер. с анг. – М:. ООО «И.Д. Вильямс, 2007. – 1168 с.

Основная:

Павловская Т.А. C #. Программирование на языке высокого уровня. Учеб. для вузов. – СПб: Питер, 2008 – 432 с.

Павловская Т.А., Щупако Ю.А. C / C ++. Структурное программирование, Питер, 2005. – 402 с.

Дополнительная:

Гросс К. С# 2008: Пер. с. анг. – СПб. БХВ-Петербург, 2009. – 576 с.

Троелсен Э. Язык программирования С# 2005 и платформа /NET 2.0:пер. с анг. – М:. ООО «И.Д. Вильямс, 2007. – 1168 с.

Вопросы: 1. Назначение отладки программы. 2. Средства отладки программ. 3. Разработка тестов для отладки программы.

Вопросы:

1. Назначение отладки программы.

2. Средства отладки программ.

3. Разработка тестов для отладки программы.

1. Назначение отладки  программы

1. Назначение отладки программы

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

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

Причины ошибок в программе:

- синтаксические нарушения при записи текста программы;

- недопонимание сущности задачи;

- ошибки выбора метода решения (например, нарушение сходимости ряда при определенных сочетаниях исходных данных);

- неправильная реализация алгоритма;

- описки при записи текста программы (вместо одного символа набран другой, пропущен оператор, вставлена «;» сразу после заголовка цикла и т.п.);

- незнание или неправильное применение спецификаций оборудования, языка программирования;

- воздействия внешней среды (некорректные действия пользователей программы, сбои оборудования) и др.

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

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

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

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

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

Не существует строгих и регулярных методов борьбы с ошибками в программе. Основным средством обнаружения и устранения ошибок в программе является отладка ( Debug ).

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

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

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

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

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

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

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

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

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

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

  • определение наличия ошибки (тестирование),
  • диагностика и локализация ошибки,
  • устранение ошибки,
  • повторное тестирование.

Тестирование – выполнение программы со специально подготовленными наборами данных (тестовыми наборами данных). Тесты можно подразделить на два вида: проверочные и диагностические . Проверочные тесты служат только для проверки правильности (неправильности) работы программ. А диагностические служат для локализации ошибок в программе.

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

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

Эталонные результаты можно получить на основе:

- ручных расчетов;

- расчетов с помощью математических пакетов, табличных процессоров;

- справочных таблиц;

- сравнения результатов работы программы с результатами работы других, аналогичных программ.

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

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

- неправдоподобных результатов (средний балл по дисциплине АЯиП больше 4,5);

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

Если в ходе проверочного тестирования обнаруживается ошибка, то необходимо определить причину проявления ошибки и определить фрагмент кода программы, явившегося источником ошибки (локализация ошибки). Часто интегрированная среда указывает причины проявления фатальных ошибок (фатальная ошибка вызывает прекращение выполнения программы). Например, появляется сообщение « Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размера коллекции. Имя параметра index ». В режиме запуска программы «Начать отладку» система укажет и место проявления ошибки. Однако место проявления не обязательно совпадает с фактической ошибкой в программе. Более сложным является вариант, когда программа работает без фатальных ошибок, но результаты не соответствуют требуемым значениям. Диагностика ошибок в этом случае намного сложнее.

Если в ходе проверочного тестирования обнаруживается ошибка, то необходимо определить причину проявления ошибки и определить фрагмент кода программы, явившегося источником ошибки (локализация ошибки). Часто интегрированная среда указывает причины проявления фатальных ошибок (фатальная ошибка вызывает прекращение выполнения программы). Например, появляется сообщение « Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размера коллекции. Имя параметра index ». В режиме запуска программы «Начать отладку» система укажет и место проявления ошибки. Однако место проявления не обязательно совпадает с фактической ошибкой в программе.

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

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

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

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

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

Если тесты не обнаруживают ошибок или несоответствия требованиям, то можно сделать один из двух выводов:

  • качество программы удовлетворительно;
  • тесты не способны обнаружить ошибки.

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

2. Средства отладки программ.

2. Средства отладки программ.

Visual Studio ( VS ) позволяет создавать приложения в двух конфигурациях: отладочной  ( Debug ), используемой по умолчанию, и рабочей  ( Release ). Можно определить и другие конфигурации, но эта возможность не рассматривается. Переключаться между конфигурациями можно с помощью меню Построение – Диспетчер конфигураций , в появившемся одноименном окне в раскрывающемся списке Активная конфигурация решений выбирают соответствующий вид. Компиляцию программы можно осуществлять двумя способами: с подключением и без включения отладки. По умолчанию при запуске приложения из интегрированной среды разработки ( IDE ) VS оно запускается с включением  отладки . Это происходит: при нажатии клавиши F 5; при щелчке на кнопке с изображением зеленой стрелки и подписью Начать отладку в панели инструментов; при выполнении команды Отладка – Начать отладку . Запустить приложение без отладки можно путем выбора в меню Отладка - Запуск без отладки .

Visual Studio ( VS ) позволяет создавать приложения в двух конфигурациях: отладочной ( Debug ), используемой по умолчанию, и рабочей ( Release ). Можно определить и другие конфигурации, но эта возможность не рассматривается. Переключаться между конфигурациями можно с помощью меню Построение – Диспетчер конфигураций , в появившемся одноименном окне в раскрывающемся списке Активная конфигурация решений выбирают соответствующий вид.

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

По умолчанию при запуске приложения из интегрированной среды разработки ( IDE ) VS оно запускается с включением отладки . Это происходит:

при нажатии клавиши F 5;

при щелчке на кнопке с изображением зеленой стрелки и подписью Начать отладку в панели инструментов;

при выполнении команды Отладка Начать отладку .

Запустить приложение без отладки можно путем выбора в меню Отладка - Запуск без отладки .

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

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

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

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

Эта информация хранится в pdb -файле, который находится в катале Debug , она позволяет IDE выполнять ряд полезных операций:

- выводить отладочную информацию;

- просматривать и редактировать значения переменных в области видимости во время выполнения приложения;

- приостанавливать и возобновлять выполнение программы;

- автоматически останавливать выполнение программы в определенных точках кода;

- построчно выполнять программу;

- следить за изменениями значений переменных во время выполнения приложения;

  • вручную изменять значение переменных во время выполнения программы;

- выполнять тестовые вызовы функций.

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

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

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

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

Выполнение отладки в непрерывном (обычном) режиме

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

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

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

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

Вывод отладочной информации Вывод текста в окно Вывод во время выполнения прост. Вместо Console . WriteLine () используют специальные команды: Debug . WriteLine ( ) Trace . WriteLine ( ) Эти команды функционируют почти одинаково, но с одним отличием: первая работает только в отладочных сборках, а вторая – и в отладочных и в рабочих сборках. Команда Debug . WriteLine () не компилируется в рабочую сборку. Из одного исходного файла можно создавать две версии приложения. В отладочной версии будут отображаться диагностические сведения, а в рабочей накладных расходов не будет, и пользователи не будут видеть ненужные им сообщения.

Вывод отладочной информации

Вывод текста в окно Вывод во время выполнения прост. Вместо Console . WriteLine () используют специальные команды:

Debug . WriteLine ( )

Trace . WriteLine ( )

Эти команды функционируют почти одинаково, но с одним отличием: первая работает только в отладочных сборках, а вторая – и в отладочных и в рабочих сборках. Команда Debug . WriteLine () не компилируется в рабочую сборку.

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

Эти функции работают не так, как Console . WriteLine (). Они принимают только один строковый параметр для выводимого сообщения и не позволяют вставлять значения переменных с помощью синтаксиса { X } . Это означает, что для вставки значений переменных в строки должен применяться альтернативный прием, например, операция конкатенации + . При желании можно задавать второй строковый параметр, отвечающий за отображение категории, к которой относится выводимый текст. Такой подход позволяет упростить анализ выходных сообщений в окне Вывод , что может оказаться удобным в случае вывода похожих сообщений из разных мест приложения.

Эти функции работают не так, как Console . WriteLine (). Они принимают только один строковый параметр для выводимого сообщения и не позволяют вставлять значения переменных с помощью синтаксиса { X } . Это означает, что для вставки значений переменных в строки должен применяться альтернативный прием, например, операция конкатенации + . При желании можно задавать второй строковый параметр, отвечающий за отображение категории, к которой относится выводимый текст. Такой подход позволяет упростить анализ выходных сообщений в окне Вывод , что может оказаться удобным в случае вывода похожих сообщений из разных мест приложения.

Для упрощения кода целесообразно вставить в начале программы директиву подключения пространства имен системной диагностики using System . Diagnostics ; Иначе потребуется полное указание имени System . Diagnostics . Debug . WriteLine ();  Содержание вывода отладочной информации: :  Например, оператор, в котором Func 1 является необязательным параметром, представляющим категорию: Debug . WriteLine (

Для упрощения кода целесообразно вставить в начале программы директиву подключения пространства имен системной диагностики

using System . Diagnostics ;

Иначе потребуется полное указание имени

System . Diagnostics . Debug . WriteLine ();

Содержание вывода отладочной информации:

:

Например, оператор, в котором Func 1 является необязательным параметром, представляющим категорию:

Debug . WriteLine ("Добавление 1 к i ", " Func 1");

приведет к получению такого сообщения:

Func 1: Добавление 1 к i

Для вложения значений переменных в строки так же, как и в случае использования Console . WriteLine () , применяется string . Format () Debug . WriteLine ( string . Format (

Для вложения значений переменных в строки так же, как и в случае использования Console . WriteLine () , применяется string . Format ()

Debug . WriteLine ( string . Format ("Максимальное значение у элемента с индексом {0}", i );

Помимо функций WriteLine () существует еще и другие:

Debug . Write ( )

Trace . Write ( )

Обе эти функции подразумевают использование такого же синтаксиса, как и функции WriteLine (), но отличаются тем, что не добавляют символа конца строки.

Кроме того, существуют следующие команды: Debug.WriteLineIf( ) Trace.WriteLineIf( ) Debug.WriteIf( ) Trace . WriteIf ( ) Каждая из них имеет те же параметры, что и ее, не содержащий If аналог, плюс один обязательный параметр, который предшествует всем остальным в списке. Этот параметр принимает значение типа Boolean (или выражение этого типа) и приводит к тому, что функция выводит текст только в том случае, если это значение равно true . Функции применяют для обеспечения вывода текста в окно Вывод с учетом условий. В случае несоблюдения этих условий, операторы не будут отображать отладочных сведений и окно Вывод не будет перегружаться лишней информацией.

Кроме того, существуют следующие команды:

Debug.WriteLineIf( )

Trace.WriteLineIf( )

Debug.WriteIf( )

Trace . WriteIf ( )

Каждая из них имеет те же параметры, что и ее, не содержащий If аналог, плюс один обязательный параметр, который предшествует всем остальным в списке. Этот параметр принимает значение типа Boolean (или выражение этого типа) и приводит к тому, что функция выводит текст только в том случае, если это значение равно true . Функции применяют для обеспечения вывода текста в окно Вывод с учетом условий. В случае несоблюдения этих условий, операторы не будут отображать отладочных сведений и окно Вывод не будет перегружаться лишней информацией.

Точки отслеживания ( трассировки ) Альтернативой выводу информации в окно Вывод является применение точек отслеживания (трассировки). Они являются средством VS , а не языка С#, но служат той же цели, что и функция Debug . WriteLine ( ) , позволяя выводить отладочную информацию без изменения в коде. Для добавления точки трассировки следует: 1. Поместить курсор на строку, где требуется вставить точку трассировки. Точка трассировки будет обрабатываться перед выполнением этой строки кода; 2. Щелкнуть правой кнопкой мыши на строке кода и выбрать в контекстном меню пункт Точка останова - Вставить точку отслеживания .

Точки отслеживания ( трассировки )

Альтернативой выводу информации в окно Вывод является применение точек отслеживания (трассировки). Они являются средством VS , а не языка С#, но служат той же цели, что и функция Debug . WriteLine ( ) , позволяя выводить отладочную информацию без изменения в коде.

Для добавления точки трассировки следует:

1. Поместить курсор на строку, где требуется вставить точку трассировки. Точка трассировки будет обрабатываться перед выполнением этой строки кода;

2. Щелкнуть правой кнопкой мыши на строке кода и выбрать в контекстном меню пункт Точка останова - Вставить точку отслеживания .

3. Занести подлежащую выводу строку в текстовом поле диалогового окна При попадании в точку  останова . Если на экран необходимо вывести и значение переменной, указать имя переменной в фигурных скобках. 4. Щелкнуть на кнопке ОК. Слева от строки кода, содержащей точку трассировку, появится ромбовидный символ красного цвета, и сама строка станет отображаться с красной подсветкой. Точки отслеживания (трассировки) являются разновидностью точек останова (и могут, как и точки останова, приводить к приостановке процесса выполнения приложения).

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

4. Щелкнуть на кнопке ОК.

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

Точки отслеживания (трассировки) являются разновидностью точек останова (и могут, как и точки останова, приводить к приостановке процесса выполнения приложения).

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

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

Удалять или временно отключать точки трассировки можно щелкая на них правой кнопкой мыши в окне кода, либо снимая с них отметки окне Точки останова . На то, что точка трассировки включена, в окне Точки останова указывает наличие напротив нее установленной отметки; отключенные точки трассировки не имеют таких отметок, и отображаются в окне кода в виде контурного, а не сплошного ромба. Особенности точек отслеживания: 1. Точки отслеживания не включаются в состав приложения. Они обрабатываются Visual Studio и не присутствуют в рабочей версии приложения. Видеть их в работе можно только во время выполнения приложения в отладчике VS . 2. Точки отслеживания легко добавлять в приложения, когда они необходимы, и просто удалять. Для удаления точки отслеживания достаточно щелкнуть на соответствующем красном ромбе.

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

Особенности точек отслеживания:

1. Точки отслеживания не включаются в состав приложения. Они обрабатываются Visual Studio и не присутствуют в рабочей версии приложения. Видеть их в работе можно только во время выполнения приложения в отладчике VS .

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

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

Рекомендации по применению способов вывода отладочной информации:

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

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

Выполнение отладки в режиме останова В режим останова ( Break ) можно перейти несколькими способами. Простой способом перехода – щелчок на кнопке паузы в IDE во время выполнения приложения. Эта кнопка находится в панели инструментов Отладка , панель можно добавить к другим панелям, которые отображаются по умолчанию. Первые четыре кнопки в этой панели инструментов позволяют вручную управлять остановом. Активная по умолчанию кнопка называется Начать отладку ( Start ) и идентична кнопке, предлагаемой в стандартной панели инструментов. После запуска приложения три следующих кнопки за Начать отладку , которые были неактивными, становятся доступны и позволяют: - приостановить приложение и перейти в режим останова (режим Приостановить все , Break ); - полностью останавливать приложение (без перехода в режим Break , т.е. просто выйти из приложения); - запустить приложение заново.

Выполнение отладки в режиме останова

В режим останова ( Break ) можно перейти несколькими способами.

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

Первые четыре кнопки в этой панели инструментов позволяют вручную управлять остановом. Активная по умолчанию кнопка называется Начать отладку ( Start ) и идентична кнопке, предлагаемой в стандартной панели инструментов.

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

- приостановить приложение и перейти в режим останова (режим Приостановить все , Break );

- полностью останавливать приложение (без перехода в режим Break , т.е. просто выйти из приложения);

- запустить приложение заново.

Точки останова Точка останова ( breakpoint ) представляет собой отметку в исходном коде, которая приводит к автоматическому переходу в режим Приостановить все . Эти точки можно настраивать так, чтобы они позволяли приложению: - переходить в режим Break при достижении точки останова; - переходить в режим Break при достижении точки останова только в случае, если булевское выражение равно true ; - переходить в режим Break при достижении точки останова определенное количество раз; - переходить в режим Break при достижении точки останова в случае, если с момента последнего достижения точки останова значение переменной изменилось; - выводить текст в окно Вывод. Выполнение всех этих действий возможно только в отладочных сборках. При компиляции рабочей сборки все точки останова игнорируются.

Точки останова

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

- переходить в режим Break при достижении точки останова;

- переходить в режим Break при достижении точки останова только в случае, если булевское выражение равно true ;

- переходить в режим Break при достижении точки останова определенное количество раз;

- переходить в режим Break при достижении точки останова в случае, если с момента последнего достижения точки останова значение переменной изменилось;

- выводить текст в окно Вывод.

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

Простые точки останова, предусматривающие перевод приложения в режим Break при достижении соответствующей строки, добавляются, например, щелчком правой кнопки мыши на строке кода и выбором в контекстном меню пункта Точка останова – Вставить точку останова . Точка останова отображается в виде красного круга рядом с указанной строкой кода, которая подсвечивается. Информацию о точках останова можно просматривать с помощью окна Точки останова . Это окно применяют: - для отключения точек останова (снимая отметки, отображающиеся слева от их описания). Отключенные точки останова будут иметь вид не закрашенных красных кружков; - для удаления точек останова; - для редактирования свойств.

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

Информацию о точках останова можно просматривать с помощью окна Точки останова . Это окно применяют:

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

- для удаления точек останова;

- для редактирования свойств.

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

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

Выбор пункта Условие приводит к отображению диалогового окна Условие точки останова ( Breakpoint Condition ).

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

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

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

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

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

Существуют еще два способа для перехода в режим Break . Первый подразумевает переход при выдаче необрабатываемого исключения. Второй способ подразумевает переход в режим останова при генерации утверждения ( assertion ).

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

В режиме Break можно использовать разнообразные приемы анализа кода и состояния приложения в точке останова.

Мониторинг содержимого переменных

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

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

При запуске приложения компоновка некоторых окон  в IDE изменяется. Одно из новых окон появляется в нижнем левом углу. Оно позволяет наблюдать за значениями переменных в приложении в режиме Break . Вкладка Видимые ( Autos ). Отображает все переменные, которые используются в текущем и предшествующих ему операторах. Вкладка Локальные ( Locals ). Отображает все переменные, которые находятся в области видимости. Вкладка Контрольные значения ( Watch N). Отображает выбранные переменные и выражения (где под N подразумевается одна из тех четырех версий, которые доступны в Отладка – Окна - Контрольные значения ( Debug – Windows - Watch ). Это окно можно вызвать в режиме останова выполнения программы.

При запуске приложения компоновка некоторых окон в IDE изменяется.

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

Вкладка Видимые ( Autos ). Отображает все переменные, которые используются в текущем и предшествующих ему операторах.

Вкладка Локальные ( Locals ). Отображает все переменные, которые находятся в области видимости.

Вкладка Контрольные значения ( Watch N). Отображает выбранные переменные и выражения (где под N подразумевается одна из тех четырех версий, которые доступны в Отладка – Окна - Контрольные значения ( Debug Windows - Watch ). Это окно можно вызвать в режиме останова выполнения программы.

Все вкладки работают почти одинаково. Каждая из них содержит список переменных - имя, значение и тип каждой из них. Для сложных переменных, наподобие массивов, предусмотрены символы разворачивания и сворачивания дерева (+ и -), которые отображаются слева от их имени и позволяют получать доступ к древовидному представлению их содержимого. На рисунке показан пример вкладки Локальные. Здесь можно редактировать содержимое переменных. Делается это вводом нового значения в столбце Значение .

Все вкладки работают почти одинаково. Каждая из них содержит список переменных - имя, значение и тип каждой из них. Для сложных переменных, наподобие массивов, предусмотрены символы разворачивания и сворачивания дерева (+ и -), которые отображаются слева от их имени и позволяют получать доступ к древовидному представлению их содержимого. На рисунке показан пример вкладки Локальные. Здесь можно редактировать содержимое переменных. Делается это вводом нового значения в столбце Значение .

Пошаговое выполнение кода В режиме Break можно выполнять код в пошаговом режиме и просматривать результаты, к которым приводит выполнение каждой строки кода. После перехода в режим Break слева от кода появляется курсор в виде желтой стрелки, который первоначально отображается внутри кружка красного цвета, представляющего точку останова, и указывает на строку, которая должна выполняться следующей. Начиная с этой точки, выполнение кода можно продолжать построчно. Варианты пошагового выполнения: - Шаг с обходом (клавиша F 10) предусматривает пропуск вложенных блоков кода, кода функций включительно; - Шаг с заходом (клавиша F 11) позволяет выполнять данный оператор и переходить к следующему оператору, который подлежит выполнению; - Шаг с выходом ( Shift + F 11) позволяет переходить сразу к концу блока кода и возобновлять режим Break со следующего за ним оператора. При случайном переходе к функции, код которой не представляет интереса, можно воспользоваться режимом Шаг с выходом для возврата в код, где функция вызывалась.

Пошаговое выполнение кода

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

- Шаг с обходом (клавиша F 10) предусматривает пропуск вложенных блоков кода, кода функций включительно;

- Шаг с заходом (клавиша F 11) позволяет выполнять данный оператор и переходить к следующему оператору, который подлежит выполнению;

- Шаг с выходом ( Shift + F 11) позволяет переходить сразу к концу блока кода и возобновлять режим Break со следующего за ним оператора. При случайном переходе к функции, код которой не представляет интереса, можно воспользоваться режимом Шаг с выходом для возврата в код, где функция вызывалась.

3. Разработка тестов для отладки программы

3. Разработка тестов для отладки программы

Рекомендации по организации тестирования: 1. Ожидаемые результаты выполнения теста должны прогнозироваться до его выполнения. 2. Следует проверять работу программы при правильных исходных данных и при данных, содержащих ошибки. 3. Не следует изменять программу для облегчения тестирования. 4. Тесты надо проектировать так, чтобы достигалась высокая вероятность обнаружения ошибки, а не демонстрация правильного выполнения программы..

Рекомендации по организации тестирования:

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

2. Следует проверять работу программы при правильных исходных данных и при данных, содержащих ошибки.

3. Не следует изменять программу для облегчения тестирования.

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

Рекомендации по составлению тестов для проверки правильности обработки исходных данных Если условие ввода параметра х  задает диапазон xmin … xmax , то тестовые варианты охватывают значения xmin , xmax , значения чуть левее xmin и чуть правее xmax . Если условие ввода параметра х задает множество значений ( a , b , c ), то тестовые варианты должны проверять работу при минимальном и максимальном значении параметра, при значениях чуть меньше минимального и чуть больше максимального значений. Если внутренние структуры данных имеют определенные границы, то следует проверить эти структуры на их границах. Если данные в программе представляют множество значений, то надо тестировать обработку первого и последнего элементов; при наличии одного и «максимального» количества элементов; упорядоченных (по возрастанию, убыванию), неупорядоченных элементов.

Рекомендации по составлению тестов для проверки правильности обработки исходных данных

Если условие ввода параметра х задает диапазон xmin xmax , то тестовые варианты охватывают значения xmin , xmax , значения чуть левее xmin и чуть правее xmax .

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

Если внутренние структуры данных имеют определенные границы, то следует проверить эти структуры на их границах.

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

Проверка логических условий программы, т.е. правильность конструкций вида If  e 1 «оператор отношения» е2 then … else … Сложное условие рассматривается как совокупность простых условий. Каждое простое условие проверяется тремя тестами, которые формируют значение:  е1, большее, чем е2;  е1, равное е2;  е1, меньшее, чем е2.

Проверка логических условий программы, т.е. правильность конструкций вида

If e 1 «оператор отношения» е2 then else

Сложное условие рассматривается как совокупность простых условий.

Каждое простое условие проверяется тремя тестами, которые формируют значение:

е1, большее, чем е2;

е1, равное е2;

е1, меньшее, чем е2.

Тесты для циклов с фиксированным числом п повторений: - только один проход цикла; - два прохода цикла; - п -1 проходов цикла; - п проходов цикла; - попытка п +1 прохода цикла.  Тесты для итерационных циклов: - проверка с различными значениями точности вычислений;

Тесты для циклов с фиксированным числом п повторений:

- только один проход цикла;

- два прохода цикла;

- п -1 проходов цикла;

- п проходов цикла;

- попытка п +1 прохода цикла.

Тесты для итерационных циклов:

- проверка с различными значениями точности вычислений;

Вопросы для самоподготовки 1. Источники ошибок в программах и результатах их выполнения. 2. Назначение и возможности отладки программ. 3. Понятие проверочного и диагностического теста. 4. Средства языка С # для выдачи отладочной информации. 5. Средства интегрированной среды разработки программ для выдачи отладочной информации. 6. Рекомендации по составлению проверочных тестов. 7. Разработка предложений по составлению проверочных тестов для курсовой работы.

Вопросы для самоподготовки

1. Источники ошибок в программах и результатах их выполнения.

2. Назначение и возможности отладки программ.

3. Понятие проверочного и диагностического теста.

4. Средства языка С # для выдачи отладочной информации.

5. Средства интегрированной среды разработки программ для выдачи отладочной информации.

6. Рекомендации по составлению проверочных тестов.

7. Разработка предложений по составлению проверочных тестов для курсовой работы.

-80%
Курсы дополнительного образования

Основы HTML

Продолжительность 72 часа
Документ: Cвидетельство о прохождении курса
4000 руб.
800 руб.
Подробнее
Скачать разработку
Сохранить у себя:
Отладка автономных программ (953.5 KB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт