【1000个文本绘图技巧-Graphviz002】c语言函数调用关系图自动生成方法之使用egypt和gcc的--fdump-rtl-expand生成Graphviz

背景

C语言函数调用关系图可以通过ide比如sourceinsight或者understand的关系生成。但是修改便利性不高。
graphviz提供提供了draw图的功能

原理

c语言的rtl(register transfer language)提供了汇编前的一种关系表达
gcc通过 编译选项增加 --fdump-rtl-expand,会额外生成 xxx.rtl.expand文件
egypt是一个开源工具,能够读取rtl文件,然后分rtl文件,根据调用关系生成graphviz的dot格式的关系图

流程

--fdump-rtl-expand
egpyt xxx.rtl.expand
c文件
gcc
xxx.rtl.expand文件
*.o
egypt
dot格式文件
graphviz

egypt下载和编译

下载:http://www.gson.org/egypt/download/egypt-1.10.tar.gz

编译和解压:

tar -zvxf egypt-1.10.tar.gz
cd egypt-1.10
perl Makefile.PL
make
make install

egypt如何生成一个图

egypt默认处理一个文件,可以通过结合awk等方式生成所有文件

egypt `find . -name "*.expand"` 2>/dev/null | awk '{if (NR>1) if($0!="}") print $0 }' | awk 'BEGIN{print "digraph callgraph {\nnode [shape=box, fontcolor=blue];\nrankdir=LR;"} {print $0} END{print "}"}'

查找所有expand文件
将stderr输出到null
第一行不打印,最后一行}不打印(因为egypt默认前面是定义dot头,现在放到awk中)
输入给awk
awk开始打印dot文件头 定义形状和color和方向
awk打印输出信息
awk结尾打印}

然后将生成的文档拷贝到Graphviz工具软件中转义出来

后记

egypt的高级功能可以自己开发处理。
核心是egypt能够从rtl读出关系,生成dot
dot文件给Graphviz组合提供了非常灵活的生成图的方式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值