
Лабораторочки / cpp2
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра РС
отчет
по лабораторной работе №2
по дисциплине «Информатика»
Тема: «Возможности встроенного отладчика»
Студент гр. фыв |
|
фыв |
Преподаватель |
|
Мамчур Р.М. |
Санкт-Петербург
2023
Цель работы: знакомство с понятием «отладка»; изучение возможностей встроенного отладчика и встроенной справки.
Краткие теоретические сведения
Отладка – процесс поиска и устранения ошибок в программе. Встроенный отладчик – инструмент, который оказывает помощь пользователю в поиске и устранении программных ошибок. В ходе отладки программа может находиться в одном из трех состояний:
проектирования (оформление формы и/или написание кода);
вычисления (выполнения);
прерывания.
В этом состоянии можно проконтролировать значения переменных и свойств объектов в данной точке и, если требуется, изменить эти значения "вручную". При этом нельзя изменить порядок выполняемых операторов, задать следующий исполняемый оператор, нельзя редактировать программный текст перед продолжением вычислений.
Основные отладочные команды приведены в табл. 1.
Таблица 1
Действие |
Команда меню Run |
Горячие клавиши |
Кнопки на панели инструментов |
1 |
2 |
3 |
4 |
Запуск программы на исполнение (переход проектирование/вычисление, прерывание/вычисление) |
Run |
F9 |
|
Прерывание выполнения (переход вычисление/прерывание) |
Program Pause |
|
|
Сброс программы (переход прерывание/проектирование) |
Program Reset |
Ctrl+F2 |
|
Трассировка (пооператорный режим выполнения). При вызове процедур и функций в этом режиме начинается их пошаговое выполнение. После выполнения очередного оператора происходит переход в режим прерывания |
Trace Into |
F7 |
|
Пошаговый режим выполнения программы. В этом случае Вызов функций выполняет за один шаг, БЕЗ захода в операторы функции |
Step Over |
F8 |
|
Выполнить программу до курсора и перейти в состояние прерывания |
Run to Cursor |
F4 |
|
Выполнить функцию от позиции курсора и до конца, после чего перейти в режим прерывания |
Run Until Return |
Shift+F8 |
|
Переход на строку с выполняемым оператором (просматривался код большой программы, а место останова было утеряно) |
Shoe Execution Point |
|
|
Окно Watches
Предназначено для просмотра текущих значений переменных, когда программа находится в состоянии прерывания.
Для его открытия: View > Debug Windows > Watches (аналог – Ctrl+Alt+W).
Для добавления в список новой переменной:
а) находясь в окне Watches, нажать клавишу Insert или выполнить комбинацию Ctrl+A, после чего в появившемся окне в поле Expression ввести имя нужной переменной;
б) в окне модуля установить курсор в любую точку имени нужной переменной, вызвать контекстное меню (правая кнопка мыши) и выбрать Debug > Add Watchs at Cursor.
в) в окне модуля установить курсор в любую точку имени нужной переменной и выполнить комбинацию Ctrl+F5.
Для удаления переменной из списка достаточно выделить ее строку в списке и нажать клавишу Delete.
Замечания.
1. Существует так называемая «подсказка оценки выражения», благодаря которой можно узнать текущее значение переменной (или выражения) непосредственно в окне модуля (программа должна находиться в режиме прерывания). Достаточно задержать курсор мыши над именем нужной переменной или выделенным выражением, и под курсором появится окошко инструментальной подсказки с именем переменной и ее текущим значением.
2. Существует окно Local Variables (для открытия View > Debug Windows > Local Variables), внешне похожее на окно Watch List, однако переменные в нем добавляются автоматически и представляют собой все локальные переменные текущей функции.
Окно Evaluate/Modify
Служит для оценки выражений и изменения значений переменных. Для открытия окна:
а) Run Evaluate/Modify;
б) в редакторе кода установить курсор на нужной переменной или выражении и в контекстном меню выбрать Debug Evalute/Modify; в) в редакторе кода установить курсор на нужной переменной или выражении и выполнить комбинацию Ctrl+F7.
Для оценки выражений:
1.Открыть окно Evaluate/Modify;
2.В поле Expression ввести имя переменной (или выражение), значение которой нужно оценить.
3.Нажать кнопку Evaluate. Результат оценки будет отображен поле
Result.
Для изменения значения переменной
1.Открыть окно Evaluate/Modify.
2.Указать имя переменной в поле Expression
3.Указать ее желаемое значение в поле New Value
4.Нажать кнопку Modify.
Замечание: окно Evaluate/Modify часто используется в качестве простого калькулятора.
Точки останова (точки прерывания)
Ставятся в контрольных точках программы. Программа запускается на выполнение. Достигнув первой по ходу вычисления точки останова, выполнение приостанавливается, программа переходит в состояние прерывания. Дальнейший запуск программы на исполнение приведет к отработке программного кода до очередной встретившейся точки останова.
Для управления простыми точками останова (установки и снятия) служит специальное поле слева от кода, закрашенное серым цветом. Щелчок мышью по этому полю рядом с нужной строкой приводит к установке точки останова (строка приобретает красный фон, а слева от нее появляется красная точка).
Для снятия точки останова нужно щелкнуть мышью по красной точке слева от помеченной строки.
Упражнение 1. Основы работы во встроенном отладчике
Задача: Пользуясь встроенной справкой (Help > C++ Builder Help), определить, что выполняет функция fmod и операция «%».
Т.к. встроенная справка C++ Builder Help является нерабочей, то мы воспользуемся справкой из другого источника.
Воспользуемся ресурсом: https://learn.microsoft.com/ru-ru/cpp/c-runtime-library/reference/fmod-fmodf?view=msvc-170
Функция fmod вычисляет остаток f от деления x / y в виде числа с плавающей запятой следующим образом: x = i * y + f , где i — это целое число, f имеет тот же знак, что и x , а абсолютное значение f меньше абсолютного значения y.
Пример кода программы:
#include <math.h>
#include <stdio.h>
int main( void )
{
double w = -10.0, x = 3.0, z;
z = fmod( w, x );
printf( "The remainder of %.2f / %.2f is %f\n", w, x, z );
}
Вывод данных:
The remainder of -10.00 / 3.00 is -1.000000
Упражнение 1. Основы работы во встроенном отладчике.
Задание 1-2. Запустил проект prExampl2Consol, ввел число 726 и посмотрел на результат вычислений.
Ввод данных:
726
Вывод данных:
Vvedite 3-h zna4noe 4islo 726
Resultat: 15
Скриншот выполнения консольной программы:
Повторил работу программы для нескольких разных трехзначных чисел.
Ввод данных:
282
Вывод данных:
Vvedite 3-h zna4noe 4islo 282
Resultat: 12
Скриншот выполнения консольной программы:
Ввод данных:
999
Вывод данных:
Vvedite 3-h zna4noe 4islo 999
Resultat: 27
Скриншот выполнения консольной программы:
Понял, что вычисляет программа.
Установил курсор на строку 25 и выполнил ПКМ > Dedug > Run To Cursor. (запустить выполнение программы «до курсора».) Программа перевелась отладчиком в режим прерывания:
Ввел трехзначное число 541. Получил следующий результат выполнения консольной программы:
Вернувшись в окно C++ Builder наблюдаю следующее: (задана точка остановки в строке 25, данная строка выделена)
В окне модуля поочередно установил курсор рядом с каждой переменной программы и выполнил комбинацию Ctrl+F5. Зашел в окно Wach List выполнив Ctrl+Alt+W. Наблюдаю следующие значения переменных. Вновь попыталась понять, что за вычисления производятся в программе:
Сбросил программу. Установил курсор на строку №20 и вновь запустил выполнение программы «до курсора». Ввел в окне программы другое трехзначное значение и нажал Enter. Проводя трассировку до строки №25, и просматривая значения переменных в окне “Контрольные значения”, рассмотрела работу программы:
Удалил переменные r2 и r1 из Watch List.
Открыл окно Local Variables, просмотрел его содержимое. (Ctrl+Alt+L)
Вызвал окно Evaluate/Modify, изменить значение переменной r1 на 999
Просмотрел эффект в окнах Watch List и Local Variables.
Продумал, что будет отображено в качестве результата расчета при дальнейшем запуске программы.
Установил точку останова в строку №28.
Запустил программу на дальнейшее вычисление и убедился, что результаты изменения (п. 13) не были учтены при дальнейшей работе программы. Продумал причины не изменения. Сбросил программу.
Схема алгоритма:
Код модуля cpp из проекта prExampl2Consol:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <iostream>
#include <vcl.h>
#include <math.h>
#pragma argsused
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{ using namespace std;
int z, r;
int r1, r2, r3;
cout << "Vvedite 3-h zna4noe 4islo ";
cin >> z;
r1 = (z / 100);
r2 = fmod(z / 10, 10);
r3 = z % 10;
r = r1 + r2 + r3;
cout << "Resultat: " << r;
cin >> z;
return 0;
}
Вывод: В ходе выполнения работы было изучено понятие "отладка" и ознакомлено с возможностями встроенного отладчика и встроенной справки. Были изучены основные методы отладки программного кода, такие как установка точек останова, просмотр значений переменных и отслеживание выполнения программы. Это позволит эффективно и быстро находить и исправлять ошибки в программном коде, что повысит качество и надежность разрабатываемого программного продукта.