Студопедия

Главная страница Случайная страница

Разделы сайта

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






Предупреждения






1. Помните, что оператор = является оператором присваивания, а оператор == — оператором проверки на равенство.

2. Не начинайте десятичную целочисленную константу с нуля. В этом случае она будет рассматриваться как восьмеричная или шестнадцатеричная.

3. Выражение, имеющее ненулевое значение, считается истинным. Если выражение имеет значение ноль, оно считается ложным.

4. Если в операторе switch пропущен оператор break, поток управления переходит к следующему разделу case.

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

6. Исключительная ситуация, не обработанная в блоке try-catch, может привести к аварийному завершению работы программы.

7. Открытие существующего файла стирает содержащиеся в нем данные, если не объявлен режим добавления данных.

8. Хотя стандартные потоки ввода сin и вывода cout можно считать текстовыми файлами, они являются исключением из правил.

9. Потоки cin и cout не надо объявлять. К этим потокам не применяются функции open и close. Поток cin всегда открыт для чтения, а поток cout — для вывода.

Потоковую переменную следует передавать функции по ссылке.

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

6.1 Что такое отладка кода

Отладкой кода программы называется процесс поиска ошибок в программе, реализованной на Visual C# (VC#). Ошибки кода бывают двух типов:

· синтаксические;

· логические.

Синтаксические ошибки вызваны неверным использованием средств языка C#, выявляются на этапе сборке проекта и отображаются в окне Вывод.

 

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

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

При разговоре об отладке кода нужно четко понимать, что в C# есть две версии собранного проекта. Отладочная версия (debug) и конечная версия (release).

Отладочная версия характеризуется большим размером, который может в десятки раз превышать размер конечной версии. Это связано с тем, что в собранный проект помещается вся необходимая информация для отладчика (таблицы символов и так далее). Кроме того, при сборке отладочного проекта отключена любая оптимизация, именно с этим связаны многие проблемы получения конечной версии, когда отладочная работает, а конечная нет. Тут отчасти виновата оптимизация. Именно использование отладочной версии сборки позволяет получить максимальные возможности. В любой момент можно переключиться на отладочную версию или конечную. За этот процесс отвечает пункт меню Диспетчер конфигураций….

По выбору которого появляется диалоговое окно выбора сборки проекта:

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

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

6.2 Пошаговое выполнение программы без захода в функции

Пошаговое выполнение бывает двух типов:

· с заходом в функции;

· без захода в функции.

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

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

Нажимаем ее. Программа начнет выполняться, это вы сможете увидеть в строке задач Windows:

В IDE вы увидите исходный код, в котором есть текущий курсор - указатель команды.

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

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

Выбрать тип показываемых переменных можно через меню Отладка ► Окна:

6.3 Пошаговое выполнение программы с заходом в функции

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int i=255;

i = i + 1;

test();

 

}

 

static void test()

{

int x;

x = 234;

x = x + x;

}

}

}

Дойдем по шагам к функции test(), пока на нее не укажет курсор.

Если нажать F10, то функция просто выполнится, и мы переместимся на следующую команду.

Но нам нужно зайти внутрь, а поэтому нужно нажать F11 или выбрать кнопку на панели инструментов.

В результате мы попадем в функцию:

Обратите внимание, что в окне переменных пропала переменная i, так как она не находится в текущей области видимости.

6.4 Настройка окна просмотра переменных

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

Например:

6.5 Быстрый просмотр переменной

Есть два способа, первый - подвести курсор и поставить на середину имени переменной. IDE высветит ее значение.

Второй способ - это выделить переменную и вызвать из контекстного меню, например, пункт QuickWatch.

Появится диалоговое окно, в котором будет отображена переменная.

Это окно не такое простое, как кажется, в нем можно писать выражения и вычислять их значения. Например, можно описать x*x и нажать Пересчитать, в результате будет рассчитано значение.

6.6 Исправление значения переменной

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

В поле Значение появится курсор, и значение переменной можно править. По окончанию редактирования нужно нажать Enter.

Сделаем следующий шаг работы программы.

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

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

Для отслеживания узких мест программы существуют точки останова. В этих местах программа прекратит выполнение и приостановится. При вызове контекстного меню в нужной точке программы:

в тексте появится точка останова.

Число точек останова не ограничено.

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

В результате программа остановится у первой точки останова.

Для продолжения служит команда Продолжить (F5). Программа остановится у новой точки.

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

6.8 Просмотр структур

Значения переменных полей структуры просматриваются точно так же как и обычные переменные.

Введем структуру в текст программы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleApplication1

{

class Program

{

public struct strs

{

public int i, j;

};

 

static void Main(string[] args)

{

int i = 255;

test();

i = i + i;

}

 

static void test()

{

int y;

y = 234;

for (int x = 0; x < 10000; x++)

{

strs ss;

ss.i = 10;

ss.j = 5;

y = y + y;

}

}

}

}

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

Видны элементы структуры и их значения. Можно переключиться на вкладку Локальные для просмотра всех переменных.

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.