1.2. Отладка
В качестве средства отладки программ QNX включает в себя отладчик gdb. Это программа, под управлением которой можно запустить исполняемый модуль программы. Чтобы можно было воспользоваться отладчиком, необходимо скомпилировать программу с включением в неё отладочной информации. Этой цели служит опция "-g" компилятора. В результате компилятор включает дополнительную информацию в объектные и исполняемые модули, позволяющую связать исходный текст программы с исполняемым модулем.
Чтобы воспользоваться отладчиком gdb, его необходимо запустить, указав в качестве аргумента имя исполняемого модуля:
# gdb <имя модуля>
После запуска появляется строка приглашения для ввода команд отладчика:
(gdb)
Перечислим наиболее ходовые команды отладчика:
run - запустить исполняемый модуль.
where - показать содержимое стека.
up -движение вверх по стеку.
print - показать значение переменной.
break - установить контрольную точку (точка остановки).
next - перейти после остановки на следующую строку.
step - войти внутрь функции.
Например, запуск исполняемого модуля осуществляется командой:
(gdb)run
Подробную информацию о командах отладчика можно получить с помощью команды help. Например:
(gdb) help run
2. Упражнения Задание №1
В соответствие с вариантом реализовать на языке Си программу (lab1_1.c) расчета значения функции.
#include <stdio.h>
#include <math.h>
int main() {
double x, y, t;
t=0.5;
x=sin(t);
y=exp(t)*sqrt(x);
printf("t=%f\tx=%f\ty=%f\n", t, x, y);
return 0;
}
Результат:
# qcc zd1.c -l/lib/libm.a -o zd1
# ./zd1
t=0.500000 x=0.479426 y=1.141584
#
Задание №2
На базе задания №1 создать программу (lab1_2.c) расчета значений функции на заданном интервале с заданным шагом и вывода результатов в табличном виде. Построить график функции.
№ вар. |
Интервал/шаг |
1 |
[0.1, 0.3] / 0.01 |
№ вар. |
Вычислить выражение |
При заданных значениях |
1 |
|
|
#include <stdio.h>
#include <math.h>
#include <iostream.h>
int main() {
long double x, y, t, f;
for (t=0.1;t<=0.3; t=t+0.01) {
x=acos(t)+9.9;
y=sqrt((pow(t,2)+x)/log(t*x));
//y=sqrt (a);
f=(x/t)+(t/y)+(y/x);
cout<<"t="<<t<<" "<<"f="<<f<<endl;}
return 0;
}
Результат:
# QCC zd2.cpp -l/lib/libm.a -o zd2
# ./zd2
t=0.1 f=114.545
t=0.11 f=103.922
t=0.12 f=95.1416
t=0.13 f=87.7351
t=0.14 f=81.3969
t=0.15 f=75.9095
t=0.16 f=71.1113
t=0.17 f=66.8798
t=0.18 f=63.1201
t=0.19 f=59.7574
t=0.2 f=56.7318
t=0.21 f=53.9952
t=0.22 f=51.5079
t=0.23 f=49.2375
t=0.24 f=47.1568
t=0.25 f=45.2429
t=0.26 f=43.4766
t=0.27 f=41.8415
t=0.28 f=40.3235
t=0.29 f=38.9105
#
Задание №3
В соответствие с вариантом реализовать на языке Си программу (lab1_3.c) расчета значения суммы с заранее известным числом повторений.
№ вар. |
Вычислить сумму |
1 |
|
#include <stdio.h>
#include <math.h>
#include <iostream.h>
int main() {
double x,i;
//int i;
for (i=1; i<=15; i++) {
x=sqrt(pow(i,2)+5);}
cout<<"x="<<x<<endl;
//cout<<endl<<"x="<<x<<endl;
return 0;
}
Результат:
# QCC zd3.cpp -l/lib/libm.a -o zd3
# ./zd3
x=15.1658
#