用Graphviz进行可视化操作──绘制函数调用关系图

本文介绍了如何使用Graphviz的DOT语言和相关工具将文件系统结构和函数调用关系以图形方式展示。通过tree命令和calltree工具获取结构信息,再利用awk脚本转换为DOT描述,最后通过dot工具生成SVG或JPEG图片,实现数据的可视化。此外,还提供了一个简单的shell脚本tree2dot.sh,用于过滤并转换tree和calltree的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



描述: calltree.jpg
图片: 
描述: tree.jpg
图片:
描述: calltreefilter.jpg
图片:

by falcon<zhangjinw@gmail.com>
2007-11-14

    也许你对着一大堆数据无从着手,可却想找出数据中蕴藏的规律;也许你朦胧地知道文件系统就是一个树形的结构,但是却想有一个整体的轮廓;也许你对某个软件的结构略微清楚,但希望能够直观地看到整个软件的数据流程。
    不错,开源世界可以满足你的需求,用gnuplot可以把统计数据完美地呈现在一个图中,用Graphviz的dot工具可以把文件系统、函数调用树完美的勾画出来。我们这里仅仅关注Graphviz,gnuplot的用法你可以从网络中搜索到成千上万的资料,也可以直接到官方去看文档。
    Graphviz提供了一种描述图形的语言DOT,易于理解和通过脚本语言生成,dot工具可以根据DOT语言描述的图形绘制出各种格式的图形,这些格式包括svg和jpg等。
    关于Graphviz的详细用法和使用文档这里不介绍,请看它的官方网站:http://www.graphviz.org
    这里将主要介绍:如何把诸如文件系统、函数调用关系的结构通过Graphviz给呈现出来。
    对于文件系统的结构,你可以通过tree命令展示出类似下面的结构。

$  tree -L 1 -d linux-2.6.22
linux-2.6.22
|-- Documentation
|-- arch
|-- block
|-- crypto
|-- drivers
|-- fs
|-- include
|-- init
|-- ipc
|-- kernel
|-- lib
|-- mm
|-- net
|-- scripts
|-- security
|-- sound
`-- usr


    对于函数调用关系,calltree(当然还有很多类似的工具,gprof,call,valgrind,kft,它们的原理可以看看第一篇参考资料)可以反应出来。这里看看calltree的结果(它的详细用法见参考资料)。

$ calltree -gb -np -m *.c
main [trace.c:19]:
|   addCallTrace [symbols.c:134]
|   |   lookupSymbol [symbols.c:51]
|   |   |   assert
|   |   stackNumElems [stack.c:26]
|   |   stackTop [stack.c:32]
|   |   |   assert
|   addSymbol [symbols.c:106]
|   |   assert
|   |   translateFunctionFromSymbol [symbols.c:69]
|   |   |   fread
|   |   |   pc

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值