Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual2.doc
Скачиваний:
5
Добавлен:
07.03.2016
Размер:
3.31 Mб
Скачать

Invalidate();

}

10. Оброблювач команди меню готовий.

11. Далі ми оголосимо OutputString у заголовному файлі виду:

// buggyView.h : інтерфейс класа CBuggyView

.............................................................

protected:

CString OutputString;

.............................................................

}

12. У конструкторі виду в цей рядок заноситься підказка, що пропонує користувачеві виконати команду CalculateCalculate Average (підказка буде виведена при запуску програми):

void CBuggyView::OnDraw(CDC* pDC)

{

CBuggyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

pDC->TextOut(0, 0, OutputString);

}

13. Залишається занести в OutputString текст підказки, яка відображається у методі OnDraw():

CBuggyView::CBuggyView()

{

OutputString = "Выполните команду Calculate|Calculate Average";

}

Програма готова до виконання.

Запустіть її і виберіть команду Calculate Average. Програма повідомляє, що середнє арифметичне чисел 1-5 дрівнює -21474833.600 (рис. 13.1). Можливо, ви отримаєте інше число.

Рис. 13.1. Програма buggy: перша спроба

Схоже, ми десь помилилися.

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

Перейдемо до налагодження програми buggy. Бажано потрапити в програму під час її роботи, щоб можна було почати послідовне виконання, однак починати з самого початку програми не хочеться, оскільки в цьому випадку нам доведеться проходити через стартовий код Visual C++, який в звичайному випадку ми навіть не побачимо. Налагодження повинно починатися ближче до того місця, де, як можна припустити, виникає проблема, – до фрагмента, який відповідає за обчислення середнього арифметичного.

Щоб почати налагодження з довільного рядка, слід встановити точку переривання. Під час виконання програма зупиниться на ньому, ми зможемо переглянути свій код і при необхідності перейти в покроковий режим. Подивимося, як це робиться. Ми помістимо точку переривання на початку фрагмента для обчислення середнього арифметичного, конкретніше – на початку методу OnCalculateCalculateaverage(), в першому рядку циклу for:

void CBuggyView::OnCalculateCalculateaverage()

{

CBuggyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

float Sum;

float Average;

for(int loop_index = 1; loop_index < 5; loop_index++)

{

Sum += pDoc->data[loop_index];

}

Average = Sum / (float) 5.0;

OutputString.Format(

"Среднее арифметическое пяти чисел равно: %.3f",

Average);

Invalidate();

}

Точку переривання можна встановити перед запуском програми або під час її зупинки на іншій точці. Натискаючи клавішу F10, ми зможемо переміщатися по коду програми. Одноразове натиснення цієї клавіші переводить нас до наступного рядка програми:

void CBuggyView::OnCalculateCalculateaverage()

{

CBuggyDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

float Sum;

float Average;

for(int loop_index = 1; loop_index < 5; loop_index++)

{

Sum += pDoc->data[loop_index];

}

Average = Sum / (float) 5.0;

OutputString.Format(

"Среднее арифметическое пяти чисел равно: %.3f",

Average);

Invalidate();

}

Багаторазово натиснувши F10, ви зможете переміщатися в програмі і далі. Заодно можна буде переглянути значення різних змінних, так що в процесі налагодження ви як би зайдете у виконувану програму «з чорного ходу». Оскільки ми знаємо, як повинен працювати цей фрагмент, нам буде легше виявити проблеми, що виникають.

Щоб розмістити точку переривання на початку циклу for, встановіть на цьому рядку текстовий курсор і натисніть клавішу F9 або кнопку з піднятою рукою на панелі інструментів (вона виконує ту ж функцію ). У результаті на рядку буде встановлена точка переривання (у програмі може бути кілька точок переривання), як показано на рис. 13.2. Точка переривання позначається маленьким значком у вигляді стоп-сигналу на лівому полі.

Рис. 13.2. Установка точки переривання

Підказка. Не дозволяється встановлювати точки переривання на рядках програми, що містять оголошення змінних (наприклад, float Sum;).

Виконання програми до точки переривання

Давайте запустимо програму buggy у відладчик – для цього досить виконати команду Build → Start Debug → Go. На екрані з'являється вікно програми, і ви можете виконати команду Calculate → Calculate Average. У результаті код методу OnCalculateCalculateAverage() виконується до рядка, на якому встановлена точка переривання. Потім програма зупиняється і відображає у вікні Visual C++ код методу (рис. 13.3). Стрілка на лівому полі Visual C++, зображена на рис. 13.3, означає поточний виконуваний рядок нашої програми.

Зверніть увагу – в Visual C++ меню Build замінилося на Debug (див. рис. 13.3). Серед різних команд цього меню особливо цікаві команди Step Into (F11), Step Over (F10), Step Out (Shift+F11) та Run To Cursor (Ctrl+F10). Вони відповідають різним способам виконання програми, передбаченим у режимі налагодження Visual C++.

Рис. 13.3. Зупинка на крапці переривання

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]