Compile command: make -k

Введем с клавиатуры в мини-буфере primer2 и нажмем Enter.

Команда make сама вызовет компилятор g++ с нужными ключами. Такой способ работает только для небольших программ, состоящих из одного модуля. В более сложных случаях мы должны написать соответствующий Makefile. Рассматривать тему о Makefile мы будем позже.

 

7. Фрейм разделится на два окна. В верхнем окне находится текст программы, а в нижнем окне отображается буфер *compilation* с результатами компиляции программы..

 

 

 

8. Загружаем встроенный в Emacs командный процессор. Для этого вызываем комбинацию клавиш Alt – x. В мини-буфере внизу фрейма появляется команда M – x, вводим с клавиатуры в мини-буфере eshell и нажимаем Enter.

 

9. В верхнем окне фрейма появился буфер *eshell* с встроенным командным процессором. Запустим программу на выполнение. Для этого в верхнем окне фрейма введем с клавиатуры команду: ./primer2 и нажимаем Enter.

 

 

Для создания в Emacs следующей программы (в этом же сеансе работы Emacs) нужно: в меню выбрать Buffers – Select Named Buffer и ввести с клавиатуры в мини-буфере внизу фрейма: scratch и нажать Enter.

 

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

Утилита gdb является основным отладчиком (debugger) проекта GNU. Этот отладчик запускается из командной строки, он может использоваться для полного управления любого процесса и для исследования его работы.

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

Рассмотрим пример выполнения программы в отладчике. Пусть нам необходимо отладить следующую программу:

//Листинг 2.3

#include<iostream>

using namespace std;

int main()

{ int a=3;

a+=12; // a=a+12;

a/=4; // a=a/4; целочисленное деление

a*=6; // a=a*6;

a%=7; // a=a%7; вычисление остатка от деления

a++; // a=a+1; инкремент

cout<<”Результат вычислений = “<<a<<”\n”;

return 0;

}

1. В редакторе Emacs создаем файл primer3.cpp с текстом данной программы.

 

2. Загружаем встроенный в Emacs встроенный командный процессор. Для этого вызываем комбинацию клавиш Alt – x. В мини-буфере внизу фрейма появляется команда M – x, вводим с клавиатуры в мини-буфере eshell и нажимаем Enter.

 

3. Так как мы собираемся отлаживать нашу программу в отладчике gdb, то необходимо, чтобы в получившийся исполняемый файл была включена отладочная информация. В командной строке вводим команду:

g++ -g -o primer3 primer3.cpp и нажимаем Enter.

4. Запустим из Emacs отладчик gdb. Для этого щелкаем в строке состояния по *xxxxxxxx* левой кнопкой мыши, пока не появится окно редактирования с текстом программы. Вызываем в меню Tools – Debugger (GDB). В мини-буфере появляется строка: gdb annotate=3 primer3. Сделав активным мини-буфер, нажимаем клавишу Enter.

5. Вошли в режим отладки. Появилась командная строка (gdb).

 

6. В командной строке (gdb) введем следующие команды:

· установим точку останова на входе в функцию main()

Break main

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

Run

· дадим указание отладчику, чтобы при каждой остановке выполнения программы на экран выводилось значение переменной a

Display a

 

7. Фрейм разделится на два окна. В верхнем окне находится буфер с отладчиком gdb, а в нижнем окне отображается текст программы.

Выполнение программы доходит до строки 4 исходного кода (в ней находится точка останова) и приостанавливается, на экран выводится значение переменной a (так как инициализация переменной a еще не выполнена, на экран выводится “странное” значение a). Для продолжения работы программы отладчик gdb будет ожидать ввода новой команды.

Для выполнения одной строки исходного кода используются команды n или next, s или step. next, в отличие от step, выполняет вызов функции как одну строку кода и останавливает выполнение программы на строке, следующей непосредственно после вызова функции.

Для построчного выполнения программы будем вводить в командную строку gdb команду n и нажимать клавишу Enter:

(gdb) n {Enter}

 

8. Для выхода из отладчика gdb нужно в командной строке gdb ввести команду quit:

quit и нажимаем Enter

 

 

Рассмотрим пример программы, вычисляющей a6 за три операции умножения (не пользоваться другими арифметическими операциями), где a – целое число, которое вводится с клавиатуры.

//Листинг 2.4

#include<iostream>

using namespace std;

int main()

{

int a;

cout<<"a= ";

//вводим с клавиатуры a

cin>>a;

//вычисляем a в кубе

a=a*a*a;

//вычисляем a в шестой степени

a=a*a;

cout<<"a^6= "<<a<<'\n';

return 0;

}

 

Задание.

1. Разобрать теоретический материал занятия и выполнить все рассмотренные примеры с использованием компилятора g++, редактора Emacs и отладчика gdb.

2. Написать программу на языке С++ согласно своему варианту. Необходимые данные вводить с клавиатуры. Результаты выводить на экран. Дано целое число a, которое вводится с клавиатуры. Не пользуясь никакими другими арифметическими операциями, кроме умножения получить:

 

Варианты:

1. a3 и a10 за четыре операции.

2. a4 и a20 за пять операций.

3. a5 и a13 за пять операций.

4. a5 и a19 за пять операций.

5. a2, a5, a17 за шесть операций.

6. a4, a12 и a28 за шесть операций.

7. a7 за четыре операции.

8. a8 за три операции.

9. a9 за четыре операции.

10. a10 за четыре операции.

11. a13 за пять операций.

12. a15 за пять операций.

13. a21 за шесть операций.

14. a28 за шесть операций.

15. a64 за шесть операций.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: