Unix Man (Справочное руководство)


CTRACE(1) - часть 3


ctrace lc.c > temp.c cc temp.c a.out

то результат будет таким:

2 main() 6 nl = 0; /* nl == 0 */ 7 while ((c=getchar()) != EOF)

Теперь программа ждет ввода. Если Вы вводите те же тестовые данные, что и ранее, получится следующее:

/* c == 49 or '1' */ 8 if (c = '\n') /* c == 10 or '\n' */ 9 ++nl; /* nl == 1 */ 7 while ((c=getchar()) != EOF) /* c == 10 or '\n' */ 8 if (c = '\n') /* c == 10 or '\n' */ 9 ++nl; /* nl == 2 */ /* repeating */ /* repeated < 1 time */ 7 while ((c=getchar()) != EOF)

Если теперь ввести символ конца файла, получится окончательный результат:

/* c == -1 */ 10 printf ("%d\n",nl); /* nl == 2 */ 2

/* return */

Обратите внимание на печать значения переменной nl сразу после трассировки оператора printf. Также обратите внимание на комментарий /* return */, добавленный отладчиком ctrace в конце трассировки. Он указывает на неявный выход из функции по достижении закрывающей скобки.

Трассировочная печать показывает, что переменной c присваивается значение '1' в строке 7, а в строке 8 она уже имеет значение '\n'. Раз Вы обратили внимание на оператор if в строке 8, то Вы, скорее всего, догадаетесь, что использовали оператор присваивания = вместо сравнения ==. Во время простого просмотра текста программы эту ошибку легко пропустить.

Управление трассировкой во время выполнения

Стандартный режим трассировки охватывает всю программу, если только не заданы опции -f или -v для трассировки избранных функций. Стандартное использование отладчика ctrace не дает возможности пооператорного управления трассировкой, не позволяет выключать и включать трассировку во время выполнения отлаживаемой программы.

Вставляя в программу вызовы функций ctroff( ) и ctron( ), можно, соответственно, выключать или включать трассировку во время выполнения. Тем самым, используя операторы if языка C, можно реализовать сколь угодно сложный способ управления трассировкой. На основании того факта, что ctrace определяет переменную препроцессора CTRACE, реализуется условная вставка операторов управления трассировкой, например




Начало  Назад  Вперед



Книжный магазин