calltreetest中文_calltree查看工程代码中的函数调用关系
今天使用了calltree这个源码函数关系查看工具,结果很直观,但安装过程有点点繁琐,现将其安装过程记录下来,免得以后忘了。
当我们查一个比较大的项目的代码时,往往函数间的关系比较复杂,如果直接看源码,函数间跳来跳去的,头都跳晕了,最后还没看出个所以然来,calltree这个工具满足了广大程序员的“消费”需求,可以很清楚的打印出函数间的调用关系,如果要使用图形化的工具来查看函数调用关系还得装一个软件graphviz。好了,下面开始讲安装过程:
从下面这个网站上下载源代码:calltree-2.3.tar.bz
http://citeseer.ist.psu.edu/graham82gprof.html
1、解压安装到系统路径
#tar jxvf calltree-2.3.tar.bz
#cd calltree-2.3
#make //不用配置,直接编译
编译完成后会在当前目录的calltree/OBJ/i686-linux-cc目录下会生成一个二进制文件:calltree,这就是我们需要的文件,将其拷贝到/usr/bin目录下,或者做一个软链接。
2、开始使用calltree
下面进入到我一个示例代码中,输入如下命令:
#calltree -gb -np -m *.c
从中可以很容易的看出函数间的调用关系。
下面介绍一下各选项:
-b 就是那个竖线了,很直观地显示缩进层次。
-g 打印内部函数的所属文件名及行号,外部函数所属文件名和行号也是可打印的,详man
-np 不要调用c预处理器,这样打印出的界面不会很杂乱,但也可能会产生错误哦,如果我们只看
函数的调用关系的话,不会有大问题。
-m 告诉程序从main开始
还有一个重要的选项是 listfunction ,缩写是lf,用来只打印某个函数中的调用,用法是:
#calltree -gb -np lf=send_query *.c
从这个结果可以非常方便的看出函数调用关系,不过还是不够美观哦,所以加上-dot参数,产生一个dot图形吧。
不过在使用dot命令之前,需要安装一个graphviz软件包,我在cent-os5.5是直接输入以下命令安装的:
#yum install graphviz*
如果你的系统不支持yum在线安装,可以去下面这个网站下载相应的rpm包。
http://www.graphviz.org/
下面是我写的一个脚本(可以分开每一条命令来执行)test.sh:
#!/bin/sh
/usr/bin/calltree -gb -np -m *.c -dot > test.dot
/usr/bin/dot -Tjpg test.dot -o calltree.jpg
运行脚本:
#sh +x test.sh
calltreetest中文_calltree查看工程代码中的函数调用关系相关推荐
- 查找unity工程代码中中文字符
游戏本地化的时候可能需要搜索工程代码中的中文字符. 这个可以通过加载文件一行一行读取后,通过正则来查询. 下面的代码LoadFile函数通过流加载文件,FindFile通过递归病使用Directory ...
- Source Insight中显示函数调用关系的方法
接上一篇博客,解决了中文注释乱码后,使用Source Insight显示函数调用关系树状图 网上借鉴了一些经验,但感觉可能是版本不同未能完全奏效,下面我将记录我最终探寻出的解决方法 1.双击编辑器中需 ...
- 如何查看python代码中的数据集 按住data鼠标右键_Python小练习——电影数据集TMDB预处理...
加载TMDB数据集,进行数据预处理 TMDb电影数据库,数据集中包含来自1960-2016年上映的近11000部电影的基本信息,主要包括了电影类型.预算.票房.演职人员.时长.评分等信息.用于练习数据 ...
- 查看JS代码中\x68等加密数据内容的解决办法
直接复制代码保存为html格式文件,更改其中的加密内容 <script> var a1="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77 ...
- 通过IDEA查看jar包中的依赖关系
- python类中的函数调用关系_Python中类的内置方法与继承关系实例
1.类的内置方法 Python内部类: 所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界. 例子: 汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类, ...
- android库项目管理,一个android工程代码多个差异化项目管理方法探讨
一个android工程代码多个差异化项目管理方法探讨 核心提示: 1.工程代码中尽量不要使用产品名称.设备名称之类的东西来区分,尽量以功能名称来区分,在工程独立的配置文件中再去配置这个文件: 2.在c ...
- 基于C++和Opencv2的虹膜识别工程代码解析
目录 一.说明 二.虹膜识别工程结构 1. OsiCircle类 2. OsiStringUtils类 3. OsiManager类 4. OsiEye类 5. OsiProcessings类 三.虹 ...
- Source Insight 查看函数调用关系使用技巧
用处 要想了解大型工程的运行原理和过程,分析其函数调用关系是一个很有用的方法.比起自己一个个搜索.记录,使用工具效率会更高.Source Insight 就有一个显示函数调用关系的功能,非常好用. P ...
最新文章
- Java的基本数据类型
- 信号建模与参数估计作业重新计算
- AI创业公司最佳「开发工具」指南火了,还发现了个可挑战Jupyter的「杀手」
- 获取RadioButton选中的值
- python百题百练 二级题目_计算机二级有必要考吗
- Hadoop入门经典:WordCount
- 防止按钮重复点击 模型转字典 接口传参不能用汉字,要转码
- SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换
- gson json和类转换_带有GSON和抽象类的JSON
- ubuntu wifi固定ip_自制wifi遥控小车!ESP8266实践指南(二)
- vs.php中使用apache或IIS7进行外部调试
- Reusability1
- AndroidStudio安卓原生开发_UI控件_TextView_Button_EditText---Android原生开发工作笔记97
- 基于迭代局部搜索和随机惯性权重的BA算法MATLAB实现(ILSSIWBA)
- 如何使用monitor(DDMS)抓取traceview文件
- 微信小程序Post方法提交数据
- 交叉编译libxcb与X11
- C++常成员函数与普通成员函数访问比较
- Java代码审计学习笔记
- 如何将GitHub上的项目或代码文件下载到本地,并且上传自己的代码
热门文章
- 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?
- 使用LiteOS Studio图形化查看LiteOS在STM32上运行的奥秘
- “3+3”看华为云FusionInsight如何引领“数据新基建”持续发展
- Stanford公开课《编译原理》学习笔记(1~4课)
- 【奇技淫巧】Android真机调试看不到应用logcat或者应用logcat信息太少的解决方法
- Python爬虫从入门到精通——基本库re的使用:正则表达式
- linux查进程内存问题,关于linux下内存问题排查的工具
- oracle .bdb,oracle 11g RAC crfclust.bdb过大的处理
- angularjs组件间通讯_angular组件间通讯的实现方法示例
- C++ 堆区和栈区的区别