mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      CFLOW(1)                                               CFLOW(1)

      НАЗВАНИЕ
              cflow - построение графа вызовов C-программ

      СИНТАКСИС
              cflow  [-r] [-ix] [-i_] [-dчисло] файл ...

      ОПИСАНИЕ
              Команда cflow анализирует набор C-, YACC-, LEX-, а так-
              же ассемблерных и об ектных файлов и пытается построить
              граф внешних  ссылок.  Файлы  с  расширениями  .y  (для
              YACC), .l (для LEX), .c (для C) и .i (для промежуточно-
              го  кода)  соответствующим  образом   препроцессируются
              (файлы .i игнорируются), а затем  подвергаются  первому
              проходу программы lint(1).  (Допускается  использование
              опций -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(), 
                   2               f: int(), 
                   3                       h: <>
                   4                       i: int, 
                   5               g: <>

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

              В дополнение к опциям -D, -I и -U, которые  интерпрети-
              руются так же, как в командах cc(1) и  cpp(1),  команда
              cflow имеет следующие опции:

              -r    Заменить отношение "вызывающий-вызываемый" на об-
                    ратное, чтобы получить инвертированный граф,  по-
                    казывающий, кто вызывает каждую из функций. Вызы-
                    ваемые функции упорядочиваются по алфавиту.

              -ix   Учитывать внешние и статические  ссылки  на  дан-
                    ные. По умолчанию в граф вызовов включаются толь-
                    ко функции.

              -i_   Учитывать имена, начинающиеся с подчеркивания. По
                    умолчанию такие функции (и данные, если использу-
                    ется опция -ix) в граф не включаются.

              -dчисло
                    Отсекать граф вызовов на уровне, который  опреде-
                    ляется целым десятичным числом. По умолчанию  это
                    очень большое число. Уровень отсечения может быть
                    только положительным.

      СМ. ТАКЖЕ
              as(1), cc(1), lex(1), lint(1), nm(1), pr(1), yacc(1).

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

      СЮРПРИЗЫ
              В файлах, сформированных программами lex(1) и  yacc(1),
              используются операторы изменения нумерации  строк,  что
              может ввести в заблуждение cflow. Чтобы  получить  пра-
              вильный результат, натравите  cflow  на  входные  файлы
              yacc'а или lex'а.

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

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



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк