用cflow工具生成代码函数调用关系【转】

简介: 1. 安装  sudo apt-get install cflow2.使用  cflow [options.
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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
监控 物联网 数据安全/隐私保护
以太网供电(POE):技术详解与应用探索
【4月更文挑战第22天】
1513 2
|
数据格式
一文读懂A2L文件和ASAP2 Studio的使用
一文读懂A2L文件和ASAP2 Studio的使用
一文读懂A2L文件和ASAP2 Studio的使用
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
2186 30
|
IDE 开发工具 C++
qt creator + vs2019编译记录
本文记录了作者在使用qt creator和vs2019编译项目时遇到的困难和解决方案,包括编译环境设置、qt creator编译脚本的成功案例、不带Ninja的编译脚本问题、错误示范以及相关参考链接。
859 0
qt creator + vs2019编译记录
|
Ubuntu Linux Windows
两种Ubuntu和Windows互相共享文件夹的方法
两种Ubuntu和Windows互相共享文件夹的方法
|
存储 开发工具 git
Git日常问题: 什么是LFS?及其错误解决办法
Git LFS(Git Large File Storage)是Git的一个扩展,用于管理大型文件,通过将大文件的实际内容存储在远程服务器上,而Git仓库中只保留一个轻量级的文本指针,从而加速仓库操作的速度并减小仓库大小。当遇到Git LFS相关错误时,通常需要安装Git LFS工具并按照官方文档进行配置。
1739 2
Git日常问题: 什么是LFS?及其错误解决办法
|
网络协议 算法 中间件
【总结】单片机重点知识总结记录之CMSIS详解(六)
【总结】单片机重点知识总结记录之CMSIS详解(六)
1926 0
|
存储 芯片 内存技术
嵌入式系统中常见内存的划分方法
嵌入式系统中常见内存的划分方法
1854 1
怎样获取当当网dangdang商品详情 API 返回值说明?
当当网(dangdang.com)的API(Application Programming Interface)返回值详细说明可能会随着API的更新和迭代而有所变化。通常,一个商品详情API的返回值会包含有关商品的详细信息,如商品ID、名称、价格、描述、图片链接、评价、分类等。