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

         

CFLOW(1)


CFLOW(1)

НАЗВАНИЕ


cflow - построение графа вызовов C-программ

СИНТАКСИС

cflow [-r] [-ix] [-i_] [-dчисло] файл ...

ОПИСАНИЕ


Команда cflow анализирует набор C-, YACC-, LEX-, а также ассемблерных и об ектных файлов и пытается построить граф внешних ссылок. Файлы с расширениями .y (для YACC), .l (для LEX), .c (для C) и .i (для промежуточного кода) соответствующим образом препроцессируются (файлы .i игнорируются), а затем подвергаются первому проходу программы . (Допускается использование опций -I, -D и -U препроцессора C.) Файлы с расширением .s ассемблируются, и информация извлекается (как и в случае .o-файлов) из таблицы имен. Результат всей этой нетривиальной обработки накапливается и преобразуется в граф внешних ссылок, который направляется на стандартный вывод.

Строки выходной информации пронумерованы, начиная с 1. За номером следует несколько символов табуляции, указывающих уровень вложенности. Затем идет имя глобального об екта (обычно выдаются только функции, не определенные как внешние, и с именами, не начинающимися с подчеркивания; см. ниже описание опции включения -i), двоеточие и определение глобального об екта. Если определение извлечено из C-текста, оно состоит из описания типа (например, char *), а также из заключенных в угловые скобки имени исходного файла и номера строки, в которой найдено данное определение. В определениях, взятых из об ектных файлов, информативным является только имя файла. Начальные подчеркивания из C-подобных внешних имен удаляются.

После того, как определение имени напечатано, ссылки на него содержат только номер соответствующей выходной строки. Для неопределенных ссылок печатается <>.

В качестве примера рассмотрим следующий файл f1.c:

int i;

main() { f(); g(); f(); }

f() { i = h(); }

Команда

cflow -ix f1.c

сформирует результат:

1 main: int(), <file.c 4> 2 f: int(), <file.c 11> 3 h: <> 4 i: int, <file.c 1> 5 g: <>



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


В дополнение к опциям -D, -I и -U, которые интерпретируются так же, как в командах и , команда cflow имеет следующие опции:
-rЗаменить отношение "вызывающий-вызываемый" на обратное, чтобы получить инвертированный граф, показывающий, кто вызывает каждую из функций. Вызываемые функции упорядочиваются по алфавиту.
-ixУчитывать внешние и статические ссылки на данные. По умолчанию в граф вызовов включаются только функции.
-i_Учитывать имена, начинающиеся с подчеркивания. По умолчанию такие функции (и данные, если используется опция -ix) в граф не включаются.
-dчисло Отсекать граф вызовов на уровне, который определяется целым десятичным числом. По умолчанию это очень большое число. Уровень отсечения может быть только положительным.

СМ. ТАКЖЕ



, , , , , , .

ДИАГНОСТИКА



Команда сообщает о некорректных опциях и о множественных определениях, из которых учитывается только первое. Другие сообщения могут исходить от различных используемых программ (например от C-препроцессора).

СЮРПРИЗЫ



В файлах, сформированных программами и , используются операторы изменения нумерации строк, что может ввести в заблуждение cflow. Чтобы получить правильный результат, натравите cflow на входные файлы yacc'а или lex'а.

Если нет опции -i_, но есть имена, начинающиеся с подчеркивания, результат может получиться неверным.

При наличии косвенной рекурсии программа cflow работает неправильно, если только не указана опция -r. даленным компьютерам.

СМ. ТАКЖЕ



.

ДИАГНОСТИКА



При успешном завершении результат равен 0; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки.


Содержание раздела