Отладчик gdb

Для налагодження програм використовується стандартний отладчик gdb. Формат його виклику наступний:

gdb <виконується файл, щоМ,> [<core файл>|<pid процесу>]

core файл– файл створюваний при аварійному виході програми при виникненні критичної помилки. Якщо core файлзазначений, він буде автоматично розібраний отладчиком gdb,і можна буде визначити, у якій крапці програми відбулася помилка. Якщо зазначено pid процесу, отладчик підключиться до цього процесу.

Розглянемо команди отладчика gdb.

B <номер рядка>

або

b <ім'я вихідного модуля>:<номер рядка>- установлює крапку останова в заданому рядку в зазначеному або поточному модулі;

r - запускає програму на виконання;

n - виконує черговий рядок програми без входу у функцію;

s - виконує черговий рядок програми із входом у функцію;

p <ім'я змінної> - виводить уміст змінної; q - вихід з отладчика.

 

3. Функції введення-виведення.

 

printf- Виробляє форматований вивід в stdout.

Синтаксис

# include <stdio.h>

int printf (const char * format [, argument, ...]);

 

Рrintf отримує набір аргументів, застосовує до кожного відповідну специфікацію формату з рядка format, і виводить форматовані дані в stdout. Число аргументів повинне відповідати числу специфікацій формату в format.

Рядок формату керує тим, як будуть змінюватися, і друкуватися аргументи функції. Для заданих специфікацій формату повинна бути достатня кількість адресних аргументів; якщо це не дотримується, результат може бути непередбачуваним і, ймовірно помилковим. Зайві адресні аргументи (більше, ніж вимагає формат) будуть проігноровані.

Рядок формату - це символьний рядок, що складається з двох типів об'єктів - просто символи і специфікації перетворення.

Прості символи переносяться у висновок без змін. Специфікації перетворення застосовуються для форматування.

 

% D - ціле десяткове зі знаком

%i - ціле десяткове зі знаком

%o - ціле вісімкове без знака

%u - ціле десяткове без знака

%x - ціле шістнадцяткове без знака (з літерами a, b, c, d, e, f)

% X - ціле шістнадцяткове без знака (з літерами A, B, C, D, E, F).

%f - значення зі знаком у формі [-]dddd.dddd

%e - значення зі знаком у формі [-] d. dddd e [+/-]ddd

%g - значення зі знаком або у формі f, або у формі e, з даними значенням і точністю. Хвостові нулі і десяткова крапка друкуються тільки при необхідності

%E - так само, як у випадку e, тільки з буквою E для позначення ступеня

%G - так само, як у випадку g, тільки з буквою E для позначення ступеня

 

Приклад:

 

printf ("Hi% c% d% s", 'c', 10, "there!");

 

На екрані "Hi c 10 there!"

 

scanf - Виконує форматований введення з потоку stdin.

Синтаксис

# include <stdio.h>

int scanf (const char * format [, adress, ...]);

 

Scanf переглядають вхідні поля, символ за символом, зчитуючи їх з потоку stdin. Потім кожне поле форматується у відповідності зі специфікацією формату, переданої scanf аргументом format. Після цього вона записує відформатований введення за адресами, заданим аргументами, наступними за форматної рядком. Число специфікацій формату має відповідати числу адрес.

Рядок формату керує тим, яким чином кожна функція буде зчитувати, перетворювати і записувати вхідні поля.

Рядок формату - це символьний рядок, що містить три типи об'єктів: незначні символи, значущі символи і специфікації формату.

Незначні символи - це порожньо (), знак табуляції (\ t) і символ переходу на новий рядок (\ n). Як тільки функція зустрічає незначущий символ в рядку формату, вона зчитує, але не зберігає всі наступні незначні символи до тих пір, поки не зустрінеться перший значущий символ.

Значущі символи - це все символи ASCII, за винятком знака відсотка (%). Якщо функція зустрічає в форматної рядку значущий символ, вона зчитує, але не зберігає даний символ.

Специфікація формату відповідає специфікації для printf.

 

Приклад:

scanf ("% d", & x);

зчитуємо десяткове значення в змінну х.

 

putchar- Виводить символ у потік stdout.

Синтаксис

# include <stdio.h>

int putchar (int c);

 

putchar при успішному завершенні putchar повертає виведений символ c. При помилку він повертає EOF.

 

Приклад:

putchar ('*');

- виводить на екран символ «*».