Вы находитесь на странице: 1из 11

Министерство науки и высшего образования Российской Федерации

федеральное государственное бюджетное образовательное учреждение


высшего образования
«Балтийский государственный технический университет «ВОЕНМЕХ» им. Д.Ф. Устинова»
(БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова»)
БГТУ.СМК-Ф-4.2-К5-01

Факультет О Естественнонаучный
шифр Наименование
Кафедра О7 Информационные системы и программная инженерия
шифр Наименование
Дисциплин
а Компьютерный практикум

Лабораторная работа
на тему
«Особенности использования отладчика GDB»
Вариант 7

Выполнил студент группы О715Б


Векслер А.Ю.
Фамилия И.О.

Преподаватель
Садырова А. К.
Фамилия И.О. Подпись

Оценка

«_____» 2022 г.

Санкт-Петербург
2022 г.
Задание к лабораторной работе
Часть I

1. Написать программу 1 в соответствии с вариантом при помощи


любого текстового редактора.

2. Скомпилировать программу с добавлением в файл отладочной


информации.

3. Используя отладчик GDB, проверить значение вычисляемого в


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

4. В отчете привести используемые команды отладчика и


полученный результат.

Часть II 

1. Написать программу 2 в соответствии с вариантом при помощи


любого текстового редактора.

2. Для ввода и вывода строки использовать отдельные функции.

3. Скомпилировать программу с добавлением в файл отладочной


информации.

4. Используя отладчик GDB, проверить содержимое стека при входе


в функции ввода и вывода строки и выходе из них.

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

Часть III

1. Написать программу 3 в соответствии с вариантом при помощи


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

3. Скомпилировать программу с добавлением в файл отладочной


информации.

4. Используя отладчик GDB, проверить содержимое стека при входе


в функции ввода и вывода строки и выходе из них.

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

Индивидуальные задания:
1. Найти число Фибоначчи, ближайшее к заданному натуральному числу
N.
2. Дана строка символов. Изменить строку – во всех словах, имеющих
нечетное количество символов, средний символ удалить.
3. Дана строка символов. Выделить и вывести слова, ограниченные
пробелом или знаками препинания: запятая, точка, двоеточие, точка с запятой.

Задание 1
Исходный код из файла «main.c»
#include <stdlib.h>

#include <math.h>

#include <stdio.h>

#include <conio.h>

int n, prev = 0, current = 1, fib = 0, closest, x = 0;

void FindingFib(){

printf("Enter number N = ");

scanf("%i", &n);

closest = n;

do {

fib = prev + current;

if (abs(n - fib) < closest) {


closest = abs(n - fib);

x = fib;

current = prev;

prev = fib;

} while (fib < n);

void PrintFib()

printf("closest = %i\n", x);

int main() {

FindingFib();

PrintFib();

Используемые команды отладчика:

1. break n (b) – установить точку останова на строке исходного текста


с номером n.

2. display – напечатать значения всех автоматически отображаемых


выражений, как это происходит при остановке программы.

3. run (r) – начать исполнение программы до первой точки останова


или возникновения ошибки

4. continue (c) – продолжить выполнение программы до следующей


точки останова или ошибки

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

Рисунок 1 – Ввод в командную строку

Запускаем программу с помощью отладчика GDB и устанавливаем


точки останова на 28 и 29 строке и запускаем исполнением программы

Рисунок 2 – Ввод в командную строку

Рисунок 3 – Ввод в командную строку


Задание 2
Исходный код из файла «main.c»
#include <stdlib.h>

#include <stdio.h>

#include <string.h>

char* remove_symbol( char * s)

long len = strlen(s);

long symbolIndx = 0;

char* t = s;

char* a, *b;

for( a = s, b = s; *b = *a; *a++) {

symbolIndx++;

if( symbolIndx != len / 2 + 1)

*b++;

return t;

void PrintString(char * string)

puts(string);

void EnterString(char * string)

gets(string);

int main()

char str[128];

char buf;

int i = 0;
EnterString(str);

int count = 0;

char* pstr;

pstr = strtok(str, " ,.!?");

while( pstr != NULL )

char* tok;

if( strlen(pstr) % 2 == 1 && strlen(pstr) > 1)

tok = remove_symbol(pstr);

else

tok = pstr;

pstr = strtok(NULL, " ,.!?");

PrintString(str);

return 0;

Используемые команды отладчика:

1. break n (b) – установить точку останова на строке исходного текста


с номером n.

2. display – напечатать значения всех автоматически отображаемых


выражений, как это происходит при остановке программы.

3. run (r) – начать исполнение программы до первой точки останова


или возникновения ошибки

4. continue (c) – продолжить выполнение программы до следующей


точки останова или ошибки

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

Рисунок 4 – Ввод в командную строку

Запускаем программу с помощью отладчика GDB и устанавливаем


точку останова на функциях PrintString и EnterString строке и запускаем
исполнением программы:

Рисунок 5 – Ввод в командную строку

Рисунок 6 – Ввод в командную строку


Проверяем содержимое стека перед заходом в функцию, а также после
её выполнения и выходом из функции. Результаты программы показаны на
рисунке 8.

Задание 3
Исходный код файла «main.c»
#include <stdio.h>
#define MAX 100
#define DEL 10
#include "EnModStr.h"

int main() {
char str[MAX];
char str1[100]="!?;:., ";
written (str);
squeeze (str, str1);
printf("%s\n", str);
}

Исходный код файла «EnMod.h»


void written (char * );
void squeeze (char *, char *);

Исходный код файла «EnModStr.c»


#include <stdio.h>
#define MAX 100
#define DEL 10

void written (char * s) {


int i, c;

i = 0;
while ((c = getchar()) != '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
}
void squeeze (char * s, char * s2) {
int k, i, j;

for (k = 0; s2[k] != '\0'; k++) {


for (i = j = 0; s[i] != '\0'; i++)
if (s[i] != s2[k])
s[j++] = s[i];
s[j] = '\0';
}
}

Используемые команды отладчика:


1. break n (b) – установить точку останова на строке исходного текста
с номером n.
2. run (r) – начать исполнение программы до первой точки останова
или возникновения ошибки
3. continue (c) – продолжить выполнение программы до следующей
точки останова или ошибки
4. step (s) – продолжить выполнение программы пока управление не
достигнет следующей строки исходного текста.
5. where – вывести содержимое стека

Компиляция программы

С помощью команд указанных на рис. 7 создаём статическую


библиотеку и компилируем программу с добавлением в файл отладочной
информации.

Рисунок 7 – Ввод в командную строку


Запускаем программу с помощью отладчика GDB и устанавливаем
точку останова на 9 и 11 строке и запускаем исполнением программы
Рисунок 8 – работа с отладчиком

Вам также может понравиться