Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版
-----------------------------------------------------------------------
1. 安装 Callgraph
Callgraph 实际由三个工具组合而成。
  • 一个是用于生成 C 函数调用树的 cflow 或者 calltree,下文主要介绍 cflow。
  • 一个处理 dot 文本图形语言的工具,由 graphviz 提升。
  • 一个用于把 C 函数调用树转换为 dot 格式的脚本:tree2dotx
以 Ubuntu 为例,分别安装它们:
 sudo apt-get install cflow graphviz
接下来安装 tree2dotx 和 Callgraph,这里都默认安装到 /usr/local/bin。
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx
$ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph
$ sudo cp tree2dotx callgraph /usr/local/bin
$ sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}
2. 使用
2.1 生成调用图
callgraph -f main -d ./file.c -b firefox
指定分析file.c文件中的main函数,并使用firefox显示图片,也可以使用其他浏览器。
生成的函数调用关系图默认保存为main.file_c.svg。

2.2 其他用法
1)类似 main 函数,实际也可渲染其他函数,例如:
callgraph -f test1 -d ./file.c -b firefox

2)指定函数所在文件(或者指定函数搜索路径)
使用 -d 选项
3)砍掉不感兴趣的函数分支
callgraph -f main -d file.c -F printf -b firefox

同时指定多个函数分支:
callgraph -f main -d file.c -F "printf test3 test2" -b firefox

4)指定函数调用深度:
用 -D 命令可以指定:callgraph -f main -d file.c -D 2 -b firefox
3. 代码
#include<stdio.h>void test1();
void test2();
void test3();void test1()
{printf("hello");
}void test2()
{test3();
}void test3()
{}void main()
{test1();test2();test3();printf("hello.\n");
}

如何利用Callgraph生成函数调用图?相关推荐

  1. pycharm自动生成函数调用图

    pycharm自动生成函数调用图 1.下载并安装graphviz 1.1 下载链接:https://graphviz.gitlab.io/_pages/Download/windowshiyo那个s/ ...

  2. 使用FlowDroid生成Android应用程序的函数调用图

    提到Android应用程序静态分析,就不能不提Flowdroid.该工具是目前使用很广泛的Android应用程序数据流分析工具.它基于强大的Java分析工具Soot开发,提供了许多有用的功能.具体的介 ...

  3. 使用xdebug分析thinkphp框架函数调用图

    开发中需要性能调优,使用xdebug分析thinkphp框架函数调用图. 关于xdebug的安装参考这2篇 NetBeans配置Xdebug 远程调试PHP php扩展xdebug安装以及用kcach ...

  4. 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )

    文章目录 一.函数窗口 Function window 二.创建引用图 Xrefs graph to 三.创建调用图 Xrefs graph from 一.函数窗口 Function window 左 ...

  5. 利用SLM+可调液晶光栅,北航大尺寸全息3D显示系统解析

    相比于AR/VR显示技术,全息光学的视场角受到更大限制.通常,全息技术通过干涉和衍射原理来记录.重建完整的波前信息,实现3D全息显示.现有的全息技术,常常将3D图像投影到一个看似立体的平面上,而很多全 ...

  6. Doxygen生成代码关系调用图

    1. 简介 Doxygen能将程序中的特定批注转换成为说明文件.它可以依据程序本身的结构,将程序中按规范注释的批注经过处理生成一个纯粹的参考手册,通过提取代码结构或借助自动生成的包含依赖图(inclu ...

  7. Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】

    Servlet的调用图 前面我们已经学过了Servlet的生命周期了,我们根据Servlet的生命周期画出Servlet的调用图加深理解 Servlet的细节 一个已经注册的Servlet可以被多次映 ...

  8. Node.js 应用故障排查手册 —— 利用 CPU 分析调优吞吐量

    楔子 在我们想要新上线一个 Node.js 应用之前,尤其是技术栈切换的第一个 Node.js 应用,由于担心其在线上的吞吐量表现,肯定会想要进行性能压测,以便对其在当前的集群规模下能抗住多少流量有一 ...

  9. Glide的源码解析(一)(附方法调用图)

    前言 上一篇博客讲了Glide的基本使用,知其然,也要知其所以然,这篇博客一起来学习Glide的源码.如果不知道Glide的基本使用,可以看上一篇博客:http://blog.csdn.net/luo ...

最新文章

  1. 她琴棋书画全能,还进入清华计算机系实验室,被赞智商太超群、能力过强悍...
  2. Twemproxy对redis集群进行代理实现高可用
  3. kirin710f是什么处理器_如何看待麒麟710F处理器?
  4. Netbeans自定义mode
  5. 计算机仿真实训系统的企业排名,闵行区虚拟仿真实训平台企业-哪家不错
  6. 2018年度计算机视觉GtiHub top开源项目!
  7. python中字符串函数的用法_python中字符串内置函数的用法介绍(代码)
  8. 设计模式----简单工厂
  9. SignalR---DOTNET客户端
  10. 【Python剧情版游戏】优美精致的画风甜甜的剧情、很难不让人上头啊?你get到了嘛
  11. Android控件系列——WebView
  12. 机器视觉知识汇总(持续更新)
  13. C# RSA2048 公钥加密,私钥解密
  14. 标准成本和实际成本的比较
  15. 【中文树库标记---CTB】
  16. 微信小程序下载文件wx.saveFile
  17. 从初学时整理的jq资料
  18. 43页大数据管理中心 规划设计方案
  19. java web 爬虫_Java开源Web爬虫项目
  20. golang kv存储引擎

热门文章

  1. 排查访问Linux Server速度较慢的问题
  2. 名企进名校精选IT人 07年毕业生就业看好
  3. python编程大赛队名_团队作业1——团队展示选题
  4. time函数python_Python连载6-time包函数简介
  5. linux下编译为知笔记,为知笔记 Linux 版安装
  6. 可视化计算java_Java可视化计算器
  7. [蓝桥杯][算法提高VIP]金陵十三钗(状压dp记忆化搜索)
  8. Dead Pixel CodeForces - 1315A(思维)
  9. 233 Matrix HDU - 5015
  10. 洋葱模型php,理解Koa洋葱模型