Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

cflow(1)

Name

cflow - 生成 C 流程图

Synopsis

cflow [-r] [-ix] [-i_] [-dnum] files

Description

cflow 命令分析 C、yacclex、汇编程序和对象文件的集合,并生成一个图形表示外部函数引用。后缀为 .y.l.c 的文件视情况由 yacclex 和 C 编译器处理。然后,通过 lint 的首次传递运行预处理文件和后缀为 .i 的文件的结果。后缀为 .s 的文件将进行汇编。汇编文件和后缀为 .o 的文件包含从其符号表中提取的信息。结果将进行收集并转换为外部引用的图形,此图形将写入标准输出。

输出中的每一行都以引用编号开头,后跟适当的标签数(表示级别),然后是全局符号的名称,后跟冒号及其定义。通常,仅列出不是以下划线开头的函数名称(请参见下方的 -i 选项)。对于从 C 源中提取的信息,定义由抽象类型的声明(例如 char *)组成,由尖括号、源文件的名称以及定义所在的行号限定。从对象文件中提取的定义表示下方出现符号(例如 text)的文件名和位置计数器。将删除 C 样式的外部名称中的前导下划线。输出名称的定义后,对该名称的后续引用只包含可能会找到定义的行的引用编号。对于未定义的引用,仅输出 <>

例如,假设以下代码在 file.c 中:

 
int  i;
main()
{
     f();
     g();
     f();
}
f()
{
     i = h();
}

以下命令

 
cflow -ix file.c

将生成输出

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

如果嵌套级别变得太深,可使用 -e 选项将 cflow 的输出传送至 pr 命令,以将标签扩展压缩到小于每八个空格的间隔。

-D-I-U 选项(由 cc 按照本意解释)之外,以下选项将由 cflow 解释:

-r

反转 "caller:callee" 关系将生成一个反向列表,显示各个函数的调用方。此列表还按被调用方以辞典编纂顺序排序。

-ix

包括外部和静态数据符号。缺省设置是仅包括流程图中的函数。

-i_

包括以下划线开头的名称。缺省设置是排除这些函数(如果使用 -ix,也会排除数据)。

-dnum

num 十进制整数表示切断流程图的深度。缺省情况下,此数字非常大。尝试将切断深度设置为非正整数将被忽略。

See also

as(1)、cc(1)、lex(1)、lint(1)、nm(1)、pr(1)、yacc(1)

Diagnostics

报告存在多个定义,仅相信第一个。

Notes

lexyacc 生成的文件会导致行号声明重新排序,这样可能会使 cflow 感到混乱。要获得正确的结果,请向 cflow 提供 yacclex 输入。