转自:http://www.cnblogs.com/feng-zi/p/5469652.html
1. 安装 sudo apt-get install cflow 2.使用 cflow [options...] [file]... 例: cflow main.c 生成main.c文件例的函数调用关系 cflow -x main.c 生成交叉引用表,查看函数调用的位置和文件 cflow -o call_tree.txt main.c 生成调用关系并输出到call_tree.txt文件 cflow -d 5 -o call_tree.txt main.c 指定输出的最大调用深度位5 其他选项:用 cflow --help查看 通用选项: -d, --depth=NUMBER 设置流程图的绘制深度 -f, --format=NAME 使用指定的输出格式名。有效名称是‘gnu’(默认)和‘posix’ -i, --include=CLASSES 包含指定的符号类(见下)。在 CLASSES 之前放上 ^ 或 - 将它们从输出中省去 -o, --output=FILE 设置输出文件名(默认为 -,即标准输出) -r, --reverse * 打印反向调用树 -x, --xref 仅生成交叉引用列表 --include 参数的符号类 _ 以下划线开始的符号名 s 静态符号 t typedefs(仅针对交叉引用) x 所有的数据符号(外部的和静态的) 句法分析控制: -a, --ansi * 仅接受 ANSI C 标准的源码 -D, --define=NAME[=DEFN] 将 NAME 预定义为一个宏 -I, --include-dir=DIR 将 DIR 目录添加至可被头文件搜索到的目录列表 -m, --main=NAME 假定主函数是个叫 NAME 的函数 -p, --pushdown=NUMBER 设置初始标识栈大小为 NUMBER --preprocess[=COMMAND], --cpp[=COMMAND] * 执行指定的预处理命令 -s, --symbol=SYMBOL:[=]TYPE Register SYMBOL with given TYPE, or define an alias (if := is used). Valid types are: keyword (or kw), modifier, qualifier, identifier, type, wrapper. Any unambiguous abbreviation of the above is also accepted -S, --use-indentation * 依赖缩进风格 -U, --undefine=NAME 取消前面所有的 NAME 预定义 输出控制: -b, --brief * 简洁输出 --emacs * 为与 GNU Emacs 联合使用而显示额外的格式输出 -l, --print-level * 打印调用关系树的嵌套结构 --level-indent=ELEMENT 控制图显示 -n, --number * 打印行号 --omit-arguments * 不在函数声明部分打印参数列表 --omit-symbol-names * 不在声明字符串中打印符号名 -T, --tree * 绘制 ASCII 形式的树 输出信息选项: --debug[=NUMBER] 设定调试级别 -v, --verbose * 详细的错误诊断报告 -?, --help 显示此帮助列表 --usage 显示一份简洁的用法信息 -V, --version 打印程序版本 选项完整形式所必须用的或是可选的参数,在使用选项缩写形式时也是必须的或是可选的。 * 每个带有星号标记的选项是相反操作,就像前面带有‘no-’的长选项名一样。例如,--no-cpp 就是取消 --cpp 选项用的。 其他工具: ctags: 为所有函数创建索引 cxref: 生成交叉引用表
【作者】张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.