总结:
make  (-fdump-rtl-expand)  去除编译优化,比如-O3
dot test.dot -Tpng -o test.png

egypt  --omit av_ts_make_time_string,av_ts_make_string  --include-external   test.c.128r.expand

其中--omit是忽略哪些函数

--include-external显示调用的第3方库函数,比如av_register_all, fwrite

dot选项中

-Grankdir=LR表示将图从左到右,而不是从上到下排列

环境:centos 64

1,安装perl

yum install perl  

为了防止后面“perl Makefile.PL”时出现“Can't locate ExtUtils/MakeMaker.pm”错误,需要:

yum install perl-devel 

如果还不行:

yum install perl-CPAN 

2,安装egypt: create call graph from gcc RTL dump

让编译器自己dump出调用关系,然后分析分析,交给Graphviz去绘图

下载 http://www.gson.org/egypt/

链接:http://pan.baidu.com/s/1bnwd2W3 密码:n3t9

perl Makefile.PL  make  make install 

其文档位于http://www.gson.org/egypt/egypt.html

3,安装Graphviz

yum list 'graphviz*' yum install 'graphviz*'   

4,准备一份源码测试:

主要是要加上-fdump-rtl-expand编译选项,参见makefile文件 ,让gcc dump出egypt需要的文件

a,输入 make命令dump出egypt需要的文件 test.c.128r.expand

b,

egypt test.c.128r.expand >test.dot 

如果有N个expand文件,可以

egypt *.expand > all.dot 

图太大可用svg格式

c,

dot test.dot -Tpng -o test.png

生成的png文件:

附:dot文件内容

digraph callgraph { "test2" -> "test3" [style=solid]; "main" -> "test1" [style=solid]; "main" -> "test2" [style=solid]; }

使用egypt+graphviz生成函数调用关系图示例的更多相关文章

  1. 用callgraph生成的函数调用关系图

    Wu Zhangjin 创作于 2015/04/05 评论打赏 By Falcon of TinyLab.org 2015/04/03 1 故事缘由 源码分析是程序员离不开的话题.无论是研究开源项目, ...

  2. 用callgraph生成的两张函数调用关系图

    参考这里,感觉很Cool吧. Linux-0.11函数调用关系图: QEMU函数调用关系图:

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

    绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call sta ...

  4. Python - 使用objgraph生成对象引用关系图

    1- objgraph简介 HomePage:https://mg.pov.lt/objgraph/ PyPI:https://pypi.org/project/objgraph/ 一般用于分析pyt ...

  5. 用Doxygen+Graphviz生成函数调用流程图(转)

    源文链接: http://wildpointer.net/2012/04/14/doxygen_graphviz/ 上面这张图是用Doxygen+Graphviz从netcat的源代码生成的函数调用关 ...

  6. [转] 使用CodeViz生成C/C++函数调用关系图

    运行环境:虚拟机下的Ubuntu 11.04 结合Graphviz工具,使用CodeViz可以生成直观和漂亮的C/C++程序函数之间的调用关系图. 1.安装graphviz 在安装CodeViz之前, ...

  7. c语言分析函数调用关系图(call graph)的几种方法

    一.基于 Doxygen或 lxr 的API形式的文档系统. 二.基于CodeViz, CodeViz是<Understanding The Linux Virtual Memory Manag ...

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

    CodeViz是<Understanding The Linux Virtual Memory Manager>(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...

  9. python函数调用关系图(python call graph)

    由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具.(内网没装好graphviz,还没真正用 ...

随机推荐

  1. Request请求总结

    Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ...

  2. WP8版微信5.4发布 新增夜间模式 暂没小视频

    经过近一个月的内测,WP8版的微信终于更新了v 5.4版本.新增聊天中的照片墙.识别图片二维码.夜间模式等功能,还对资源占用情况进行了优化,让程序可以更流畅的在低配置设备上运行. 不过,WP8版微信5 ...

  3. Commando War

    Commando War“Waiting for orders we held in the wood, word from the front never cameBy evening the so ...

  4. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)

    Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和T ...

  5. PHP无限极分类实现

    简单版的PHP生成无限极分类代码.其中包括了数据库设计.以及输出分类HTML代码. SQL代码 CREATE TABLE `district` ( `id` int(10) unsigned NOT ...

  6. CentOS6 下安装HP-LaserJet 1020打印机

    因为实验室有个多余的老服务器,所以近段时间想把老服务器做成打印机服务器,同时因为最近在学习linux,所以就像在CentOS6.3 上安装打印机驱动.因为是新手,所以走了不少弯路,今天终于把打印机安装 ...

  7. Shortcut key for CodeBlocks

    一.not only in CodeBlocks 13.12 Undo last action Ctrl + Z //后退 Redo last action Ctrl + Shift + Z //前进 ...

  8. php email邮箱正则验证

    国际域名格式如下: 域名由各国文字的特定字符集.英文字母.数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 . 域名中字母不分大小写.域名最长可达60个字 ...

  9. 【云计算】Kubernetes、Marathon等框架需要解决什么样的问题?

    闲谈Kubernetes 的主要特性和经验分享       Capitalonline全球云主机.全球私有网络,免费试用进行时 »   主要介绍 Kubernetes 的主要特性和一些经验.先从整体上 ...

  10. ffplay 2.5.3 媒体播放器

    下载地址 http://pan.baidu.com/s/1bnlMYB1 一定要解压到 D:\ffmpeg\ 目录下 双击 OpenWith_FFPlay.reg 注册ffplay 在视频文件名上面, ...