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

转自: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:

生成交叉引用表  

 

时间: 2025-01-28 01:58:36

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

使用ant工具生成java代码时build failed,总是提示找不到第二张图的东西

问题描述 使用ant工具生成java代码时build failed,总是提示找不到第二张图的东西

cdn-Bootstrap 可视化工具 生成的代码 如何运行?

问题描述 Bootstrap 可视化工具 生成的代码 如何运行? 下载之后没有样式 排版也不对 我没有下载样式文件 我是直接引入的cdn 解决方案 需要引入的bootstrap的一些文件,我后来在网上找到了这些文件,有时间我会给贴上来 解决方案二: 网页链接里的try不知道是否可解你的疑惑

从零开始学YII2框架(五)快速生成代码工具 Gii 的使用_php实例

Yii2 框架 之所以称之为高效快速开发的一款框架,是因为有一个神奇的工具Gii 用过Yii1框架的Coder都知道,Gii可以为你快速生成代码,也就是说搭建一个可以增删改查的WebApp可能一行代码都不用写. 当然作为Coder,不写代码怎么能实现我们想要的功能呢. 上次介绍了如何安装Yii框架,本次介绍一下如何使用gii工具快速实现CRUD功能. 框架安装完成后可以通过如下链接访问Gii工具 http://localhost/yii2test/backend/web/index.php?r=

分析函数调用关系图(call graph)的几种方法

绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,能节约一些脑力.不过如果要分析的是脚本语言的代码,那多半只好老老实实用第一种方法了.如果在读代码之前,手边就有一份调用图,岂不妙哉?下面举出我知道的几种免费的分析C/C++函数调用关系的工具. 函数调用关系图(call graph)是图(graph),而且是有向图,多半还是无环图(无圈图)

用CodeViz绘制函数调用关系图(call graph)

CodeViz是<Understanding The Linux Virtual Memory Manager>(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有egypt.ncc).其基本原理是给 GCC 打个补丁,让它在编译时每个源文件时 dump 出其中函数的 call graph,然后用 Perl 脚本收集并整理调用关系,转交给Graphviz绘制图形. Code

创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]

在<基于T4的代码生成方式>中,我对T4模板的组成结构.语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码.为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情--SQL Generator.在这里,我们可以通过SQL Generator为某个数据表自动生成进行插入.修改和删除的存储过程.[文中源代码从这里下载] 一.代码生成器的最终使用效果 我们首先来看看通过直接适用我们基于T4的SQL生成模板达到的效果.右图(点击

Apache Spark源码走读(六)Task运行期之函数调用关系分析 &amp;存储子系统分析

<一>Task运行期之函数调用关系分析 概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何返回. 准备 spark已经安装完毕 spark运行在local mode或local-cluster mode local-cluster mode local-cluster模式也称为伪分布式,可以使用如下指令运行 MASTER=local[1,2,1024] bin/spark-shell

[BoUML]生成代码

此处简单介绍一下运用免费的UML工具Bouml生成C++代码. 在BoUML中的各个视图和组件基本有以下的结构:    Project      -> View          -> Diagrams          -> Components   每一个组件,比如类,在其设定对话框中都有一个语言属性.代码生成工具就是按其中的设定来生成代码. 在BoUML中生成代码主要需要Class和Artifact的定义,其中一个Artifact代表了一组头文件和源代码文件,它可以包含一个或多个C

Visual Studio DSL 入门 13---结合T4生成代码

在前面的几节里,我们已经完成了一个简单的状态机设计器,通过这个状态机可以设计出一 个状态流,但是如果只是这样,我们直接使用UML设计工具就行了,何必自己开发呢? 我们走的 是模型驱动开发路线,呵呵,注意哥说的是开发,不是设计.这一节就和我们的开发联系起来,生 成符合我们要求的代码. 结合vs.net dsl生成代码有以下几种方式: 直接硬编码,在代码里面利用模型拼接生成的代码,我记得activewriter就是这样做的生成 nhibernate代码. 结合模板引擎,你可以使用xslt或者t4(t