Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

ЧАСТО ИСПОЛЬЗУЕМЫЕ КОМАНДЫ

Читайте также:
  1. FМо-1 - частота интервала, предшествующего модальному;
  2. А. Кто заворожит посевы... 8б. Пусть не переманивает на свой участок чужого урожая.
  3. Агрегация «закрывает» капилляры, нарушая микроциркуляцию и участок ткани, который он кровоснабжает, становится ишемизированным.
  4. Анализ частоты
  5. Аппараты, используемые при определении рабочей длины зуба
  6. Арифметические команды
  7. Аудиторские процедуры, используемые при аудите кассовых операций
  8. АЦП. Выбор частоты квантования.
  9. Биологически активные вещества природного происхождения, используемые в составах косметических изделий.
  10. Битовые операции и операции сдвига используются часто

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

Команда where создает трассу – цепочку вызовов функций, произошедших до попадания программы в текущее место. Синонимом является команда bt;

Команда up перемещает текущее окно так, чтобы GDB анализировал место, из которого произошел вызов данного окна. Очень часто программа может войти в библиотечную функцию - такую, для которой не доступен исходный код, например, в процедуру ввода-вывода. Может понадобиться несколько команд up, чтобы перейти в точку программы, которая была выполнена последней;

Команда down производит эффект, обратный up;

Команда print выражение выводит значение выражения С/C++ (обычно просто переменной)в текущем окне программы. Каждый раз при использовании этой команды, gdb нумерует ее упоминание для будущих ссылок. Например:

 

(gdb) print A[i] $2 = -16

(gdb) print $2 + ML $3 = -9

 

сообщает, что величина A[i] в текущем окне равна –16, и что при добавлении этого значения к переменной ML получится –9;

Если программа запущена через оболочку shell, команда Ctrl+С немедленно прекращает ее выполнение. В gdb программа приостанавливается, пока ее выполнение не возобновится;

Команда break place установит точку останова; программа приостановится при ее достижении. Простейший способ - установить точку останова после входа в функцию, например:

 

(gdb) break MungeData Breakpoint 1 at 0x22a4:

file main.C, line 16.

 

Команда break main остановит выполнение в начале программы.

Можно установить точки останова на определенную строку исходного кода:

 

(gdb) break 19 Breakpoint 2 at 0x2290:

file main.C, line 19.

(gdb) break utils.C:55 Breakpoint 3 at 0x3778:

file utils.C, line 55.

 

Когда программа достигнет точки останова, то на экране об этом появится сообщение и приглашение, например:

 

Breakpoint 1, MungeData (A=0x6110, N=7) at main.c:16

(gdb)

 

Команда delete N удаляет точку останова с номером N. Если опустить N, будут удалены все точки останова;

Команда continue или cont продолжает обычное выполнение программы;

Команда step выполняет текущую строку программы и останавливается на следующем операторе для выполнения;

Команда next похожа на step, однако, если текущая строка программы содержит вызов функции (так что step должен будет остановиться в начале функции), не входит в эту функцию, а выполняет ее и переходит на следующий оператор;

Команда finish выполняет команды next без остановки, пока не достигнет конца текущей функции.

 

Программа, созданная на языке С, может получать переменные извне, посредством чтения аргументов функции main(). Такие данные называются «Аргументами программы». Прототип объявления функции main():

int main(int argc, char **argv);

Существует еще запись

int main(int argc, char **argv, char **envp);

Здесь argc- это переменная, указывающая на кол-во аргументов при запуске программы.

argv- является указателем на массив аргументов программы.

envp- это указатель массив переменных окружения. Этот указатель не обязателен, поэтому часто используют первый вариант записи прототипа.

Аргументы программы могут интерпретироваться как угодно. Но это может создавать большие неудобства. Если каждая программа ведет себя по-своему, то работа пользователя будет осложнена. Для того, чтобы избежать такой ситуации, большинство программ в Linux используют опции.

Опция- универсальный интерфейс для передачи данных в программу через аргументы. Механизм опции позволяет разделить аргументы на категории:

· Опции. Обычно перед опцией стоит дефис. Есть короткие(односимвольные) и длинные(многосимвольные) опции. Длинные опции часто начинаются с последовательности из двух дефисов.

· Зависимые аргументы. Некоторые опции предполагают, что сразу после опции нужно указать ее аргумент.Как правило одна опция может принимать только один аргумент.

· Свободные аргументы. Эти аргументы не связаны с опциями.

Опции можно обрабатывать как самостоятельно, так и с помощью функции getopt(). Эта функция объявлена в заголовочном файле getopt.h следующим образом:

int getopt(int argc, char **argv, const char * OPTS);

Argc и argv –это уже знакомые аргументы функции main(). В строке OPTS перечислены опции(без дефисов и других разделителей), используемые программой. Если после имени опции стоит двоеточие, значит данная опция требует наличие зависимого аргумента. Обработка опций программы подразумевается неоднократный вызов функции getopt(), которая возвращает код очередной фактически переданной опции. Если пользователь ввел опцию, не указанную в строке OPTS, то функция возвращает код символа «?». Когда все опции будут обработаны, функция вернёт -1.

Для чтения аргументов опций и независимых аргументов предназначены внешние переменные, так же объявленные в getopt.h:

extern char *optarg;

extern int optind;

Строка optarg содержит зависимый аргумент опции обрабатываемой опции, а в переменной optind хранится индекс первого свободного аргумента. При этом следует учитывать, что функция getopt() перемещает все свободные аргументы в конец массива argv. Таким образом, они оказываются в диапазоне между optind и argc-1. Если optind будет больше или равен argc, то свободных аргументов нет.

Пример программы ручного разбора аргументов.(Разбор опций –a –b -c без аргументов)

#include <stdio.h>

#include <stdlib.h>

int main (int argc, char *argv[])

{int i,j;

int aflg=0, bflg=0, cflg=0;

for(i=1;i<argc;i++)

for(j=0;argv[i][j]!=NULL;j++)

{

if (argv[i][0]=='-')

switch (argv[i][j])

{

case 'a': aflg=1; break;

case 'b': bflg=1; break;

case 'c': cflg=1; break;

case '-': break;

default: printf("error options -%c \n",argv[i][j]); break;

}

}

if (aflg==1) printf("parametr -a OK!\n");

if (bflg==1) printf("parametr -b OK!\n");

if (cflg==1) printf("parametr -c OK!\n");

return 0;

}

Пример программы, принимающей опцию -а без аргумента и опцию -b с (одним) аргументом:

int c; /* символ опции */

int aflg=0; /* флаг для опции –а так принято именовать флаги */

char *b_optarg;

...

while ((c=getopt (argc,argv,"ab:"))!= -1)

switch (c)

{

case 'a':

/* обработка –а, следует установить флаг aflg */

break;

case 'b':

/* обработка –b, получение значения аргумента из optarg */

b_optarg=optarg;

break;

case ':':

/* отсутствует аргумент опции; обработать ошибку */

fprintf(stderr,”%s: option -%c requires an argument\n”,

argv[0], optopt);

break;

case '?':

default:

/* недействительная опция */

fprintf(stderr,”%s: option -%c is invalid\n”,

argv[0], optopt);

break;

}

Варианты заданий

1. Программа принимает опции –а, -b, -c:

- опция –b требует обязательного наличия единственного аргумента;

- для завершения обработки опций принимается --;

- количество обычных аргументов не ограничено (в рамках допустимого операционной системой);

2. Программа принимает опции –с, -d, -f:

- опция –f требует обязательного наличия единственного аргумента;

- для завершения обработки опций принимается --;

- количество обычных аргументов не ограничено (в рамках допустимого операционной системой).

3. Программа принимает опции –a, -b, -c, -d;

- опции –a и –b несовместимы;

- для завершения обработки опций принимается --;

- количество обычных аргументов не ограничено (в рамках допустимого операционной системой).

4. Программа принимает опции –a, -b, -с:

- опция –a несовместима ни с одной опцией;

- для завершения обработки опций принимается "—";

- количество обычных аргументов не ограничено (в рамках допустимого операционной системой).

5. Программа принимает опции –a, -b, -c, -d:

- опция –a несовместима с опцией –b, а опция -с несовместима с опцией -d;

- для завершения обработки опций принимается "—";

- количество обычных аргументов не ограничено (в рамках допустимого операционной системой).

6. Программа принимает опции –a, -b, -c:

- опции –b и –с могут иметь по одному аргументу;

- для завершения обработки опций принимается --. Количество обычных аргументов не ограничено (в рамках допустимого операционной системой).

 

Контрольные вопросы.

1. Что такое аргументы программы? Зачем они нужны?

2. Что такое Опции? Какова их функция? Опишите виды опций

3. Что такое Getopt()? Где описана эта функция и каково ее применение.

4. Какие переменные предназначены для чтения аргументов?

5. Что такое исходный файл(исходник)? Как его создать?

6. Как скомпилировать программу в Linux? Какие компиляторы вы знаете?

7. Что такое объектный модуль? Для чего он создается?

8. Что такое отладчик gdb? Назовите и опишите основные его команды.

 




Дата добавления: 2014-12-15; просмотров: 111 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.014 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав