Операционная система UNIX. Руководство программиста


Ctrace(1)


Используя команду ctrace(1), можно проследить выполнение C-программы по операторам. ctrace читает исходный текст программы из файла и добавляет в него операторы печати для вывода значений переменных после каждого выполненного оператора. Результат выполнения команды следует направить во временный .c-файл, который затем использовать как входной для команды cc. Во время выполнения полученного в разультате файла a.out будет генерироваться вывод, в котором содержится много полезной информации о событиях в Вашей программе.

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

При обращении к ctrace можно указать только один файл с C-программой. Поэтому, чтобы проиллюстрировать действие ctrace на нашем примере, необходимо выполнить следующие команды:

ctrace restate.c > ct1.c ctrace oppty.c > ct2.c ctrace pft.c > ct3.c ctrace rfe.c > ct4.c

Здесь имена выходных файлов выбраны совершенно произвольно. Можно использовать любые подходящие имена. Выбранные имена файлов должны оканчиваться на .c, поскольку эти файлы будут использоваться как входные для системы компиляции языка C:

cc -o ctt ct1.c ct2.c ct3.c ct4.c

Затем команда

ctt -opr

выдаст приведенный ниже результат на стандартный вывод (stdout). (Напомним, что программа читает исходные данные из файла info.) Разумеется, этот результат можно направить в какой-нибудь файл или вывести на печать для последующей обработки или изучения.

9 main (argc, argv) 24 if (argc < 2) /* argc == 2 */ 32 opterr = FALSE; /* FALSE == 0 */ /* opterr == 0 */ 34 while ((ch = getopt (argc, argv, "opr")) != EOF) /* argc == 2 */ /* argv == 2147483384 */ /* ch == 111 or 'o' */ { 35 switch (ch) /* ch == 111 or 'o' */ 36 case 'o': 37 oflag = TRUE; /* TRUE == 1 */ /* oflag == 1 */ 38 break; 50 }

34 while ((ch = getopt (argc, argv, "opr")) != EOF) /* argc == 2 */ /* argv == 2147483384 */ /* ch == 112 or 'p' */ { 35 switch (ch) /* ch == 112 or 'p' */ 39 case 'p': 40 pflag = TRUE; /* TRUE == 1 */ /* pflag == 1 */ 41 break; 50 }




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



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