http://blog.csdn.net/elitemouse/article/details/41680113

http://www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/

http://www.cnblogs.com/louxin/archive/2012/01/02/2310488.html

calltree 已经在博客文件中

[root@server1 ~]# cat test.c

#include <stdio.h>
#include <unistd.h> void fun1(void)
{
fun2();
}
void fun2(void)
{
fun3();
}
fun3()
{
printf("test1");
}
int main(void)
{
fun1();
return 0;
} [root@server1 ~]# ./calltree -gb -np -m test.c
main [test.c:]:
| fun1 [test.c:]
| | fun2 [test.c:]
| | | fun3 [test.c:]
| | | | printf
[root@server1 ~]# ./calltree -b -np -m test.c
main:
| fun1
| | fun2
| | | fun3
| | | | printf calltree -b -np -m test.c -dot >test.dot
dot -Tjpg test.dot -o calltree.jpg


今天使用了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

calltree查看工程代码中的函数调用关系的更多相关文章

  1. 在linux代码中打印函数调用的堆栈的方法

    之前一直有这样的需求,当时问到,也没搜到方法,现在竟然既问到了,也搜到了,哎,世事真是不能强求啊! 在Linux内核调试中,经常用到的打印函数调用堆栈的方法非常简单,只需在需要查看堆栈的函数中加入: ...

  2. eclipse快速查看工程代码行数

    1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expression),并在搜索文本框输入\n ;3.在文件名中输入*或*.jav ...

  3. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚运行着的task其输入的数据从哪获取,处理的结果返回到哪里,如何 ...

  4. cflow察看工程函数调用关系+Linux 0.11 内核实验环境

    http://savannah.gnu.org/projects/cflow http://tinylab.org/linux-0.11-lab/ http://ftp.gnu.org/gnu/cfl ...

  5. 用cflow工具生成代码函数调用关系

    1. 安装 sudo apt-get install cflow 2.使用 cflow [options...] [file]... 例: cflow main.c 生成main.c文件例的函数调用关 ...

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

    转自:http://www.cnblogs.com/feng-zi/p/5469652.html . 安装 sudo apt-get install cflow .使用 cflow [options. ...

  7. 从jsTree演示代码中提取的在线文件查看

    从jsTree演示代码中提取的在线文件查看 jsTree 请参考:https://www.jstree.com/ 效果如下: 代码下载:http://files.cnblogs.com/files/z ...

  8. 浅谈UML中类之间的五种关系及其在代码中的表现形式

    本文转载:http://www.cnblogs.com/DebugLZQ/archive/2013/05/13/3066715.html 什么是类? 将某类东西归纳在一起,可以成为一个类. 类有很多种 ...

  9. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

随机推荐

  1. 隐藏input边框(ie6、ie7)

    去掉元素的边框,我们一贯使用border:none; 但在ie6.ie7下的input[type=text]元素,并没有去掉. 两种解决方案: 1. border:none; 并设置背景backgro ...

  2. ios8新特性widget开发-b

    os8发布已经有一段时间了,伴随着ios8同时也出现了许多新的特性,ios系统将会越来越开放,这是好事.其中一个新特性就是在下拉通知栏里加入了个性的widget,开发者可以自己定义widget的样式内 ...

  3. hello,world不使用ARC

    main.m // // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. ...

  4. Contest20140906 反思

    这次考试最大的失误就是把最简单的一道题RE了,原因是我在main()函数中开了一个2^19的数组,这种做法在linux下没有任何问题,然而放到windows下评测,就会出现栈溢出的错误. 单题总结: ...

  5. [Quote]Creating basic Excel workbook with Open XML

    Creating basic Excel workbook with Open XML [Quote from]http://www.codeproject.com/Articles/371203/C ...

  6. jstat命令(Java Virtual Machine Statistics Monitoring Tool)

    1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...

  7. 【HDOJ】1606 Excuses, Excuses!

    简单字符串. #include <cstdio> #include <cstring> #define MAXLEN 105 #define MAXN 25 char keys ...

  8. Screen-Space Bent Cones (SSBC) in Unity5

    噪音少.高度保留了纹理细节 博主近期渲染:最近用unity5弄的一些渲染 ---- by wolf96  http://blog.csdn.net/wolf96

  9. unity3d shader之God Ray上帝之光

    又是一个post-process后期效果,god ray 上帝之光,说起上帝之光就是咱们再看太阳时太阳周围一圈的针状光芒先放组效果,本文的场景资源均来自浅墨大神,效果为本文shader效果 加入了前篇 ...

  10. 整数区间及区间集合(C#实现)

    /// <summary> /// 整数区间类 /// </summary> private class Interval { , _end = ; public int St ...