使用gprof2dot和graphivz生成程序运行调用图

gprof2dot是一个将gprof生成的输出转换为dot脚本的工具。通过给定一个gprof的输出文件,将其转换为生成程序调用图的dot脚本。dot脚本可以生成图像来进行查看。

1、下载gprof2dot工具

gprof2dot工具由JoséFronseca维护,并托管在Google代码(http://code.google.com/p/jrfonseca/w/list),但是这个已经无法访问了。这里提供一个github的地址https://github.com/jrfonseca/gprof2dot.git

git clone https://github.com/jrfonseca/gprof2dot.git

这个工具需要python环境的支持,请提前安装好python3

2、使用gprof生成概要分析数据

2.1 gprof简介

Gprof 是GNU gnu binutils工具之一,默认情况下linux系统当中都带有这个工具。

    1. 可以显示“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。
    1. 可以显示“Call graph”,包括函数的调用关系,每个函数调用花费了多少时间。
    1. 可以显示“注释的源代码”--是程序源代码的一个副本,标记有程序中每行代码的执行次数。

2.2 使用gprof生成分析数据

1、在编译的时候使用-pg选项,可以写入makefile中。(链接时不需要)

# 普通程序编译
$ gcc -pg -g source.c -o binary
# cuda程序编译
$ nvcc -Xcompiler“-g -pg”-g -pg -arch = sm_20 source.cu -o binary

2、执行编译出的程序。

执行方式与没有加pg选项前是一样的,执行后将在程序运行目录下生成gmon.out文件。这是一个二进制文件,需要进一步分析生成文本文件。如果已经存在了gmon.out文件,将会被覆盖。

./binary	# 必须先运行一遍生成gmon.out文件,后面才能使用gprof工具继续操作

3、用gprof工具生成概要分析数据文件。

$ gprof ./binary> gprof_output.txt

3、生成调用图

配置好gprof2dot运行环境后,就可以使用其来生成dot脚本。

$ graph2dot.py gprof_output.txt> call_graph.dot

我这里是直接使用git克隆下来的,提前安装好了python3和graphivz`,所以直接运行即可。

4、生成可视化的图形

这里需要安装好Graphivz软件。

Windows下可以直接下载安装包安装,或者下载编写版本

Linux下可以使用下面命令直接安装

# debian系列
sudo apt install graphivz
# Archlinux系列
sudo pacman -S graphivz
# fedora
sudo dnf install graphivz

然后使用dot命令将前面生成的call_graph.dot文件转换为图像文件。

生成png文件

$ dot -Tpng call_graph.dot -o call_graph.png

生成PostScript文件

$ dot -Tps call_graph.dot -o call_graph.ps

如果要生成其他格式的图像,可以使用-T选项指定,支持eps/gif/jpeg/ps/svg/png/ps2/svgz等格式/

如果需要对布局引擎进行选择,可以使用-K进行指定,支持circo/dot/fdp/neato/nop/nop1/nop2/osage/patchwork/sfdp/twopi等。

例如,生成png图像,使用fdp布局引擎的命令如下:

$ dot -Tsvg -Kfdp call_graph.dot -o call_graph.svg

注:布局引擎可以根据自己的喜好选择,个人倾向使用fdp。默认是上下方向布局的,可以在call_graph.dot中添加一行rankdir=LR改为左向右方向布局。

参考

Linux性能評測工具之一:gprof篇

Linux下性能分析工具和内存泄露检测工具的简介(Valgrind和gprof)

gprof_call-graph_visualization

使用gprof2dot和graphivz生成程序运行调用图的更多相关文章

  1. CodeViz产生函数调用图

    一.安装过程   1.CodeViz的安装 0).确认你已经安装Graphviz[ http://www.graphviz.org/] 1).下载CodeViz.[ http://www.csn.ul ...

  2. calltree看代码调用图

    calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐  calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...

  3. Python - 运行流程图, call graph, 调用图

    解决方案 pycallgraph(感觉直接用pycallgraph grahviz命令生成的图并不是我想要的) 如何去阅读并学习一些优秀的开源框架的源码? - mailto1587的回答 - 知乎 h ...

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

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

  5. calltree+graphviz 绘出项目函数调用图

    install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...

  6. tracef 安装 跟踪 函数调用图

    http://www.prevanders.net/dwarf.html redhat 5.4 tar -zxvf libdwarf-20140519.tar.gz [root@localhost d ...

  7. 【转】doxygen+graphviz生成工程中的类继承树及函数调用图

    转自----hequn8128 在阅读代码量比较多的项目时,类的继承树和函数调用图能够直观地向我们显示类之间或者函数之间的各种关系,方便我们了解程序的整体框架,很多时候可以起到事半功倍的作用.这里尝试 ...

  8. JAVA call graphs JAVA调用图

    https://github.com/gousiosg/java-callgraph Programs for producing static and dynamic (runtime) call ...

  9. win32内存调用图

    https://msdn.microsoft.com/en-us/library/ms810603.aspxhttps://www.codeproject.com/Articles/14525/Hea ...

随机推荐

  1. 直方图与bin

    1.bin的含义 直方图中bin的含义:计算颜色直方图需要将颜色空间划分为若干小的颜色区间,即直方图的bin,通过计算颜色在每个小区间内德像素得到颜色直方图,bin越多,直方图对颜色的分辨率越强,但增 ...

  2. 8Manage PMP 项目管理工具

    范围与需求管理 8Manage 项目管理平台提供先进的机制集中管理项目的范围与需求: 提供需求申请功能:获取,过滤,解析和明确项目的需求 提供需求矩阵功能:整理分析需求并跟踪需求从开始到完成的整个过程 ...

  3. 在XP系统中,如何让添加新管理员帐户和原来的管理员帐户同时存在

    一.有新账户后administrator账户会自动隐藏的,如果你要用administrator账户登录的话,就机器启动到选账户那里用ctrl+alt+del软启动,然后就可以输入账户名administ ...

  4. 领扣-120 三角形最小路径和 Triangle MD

    三角形最小路径和 Triangle 数组 动态规划 问题 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [2], [3,4], [6,5,7], ...

  5. 【中文分词系列】 4. 基于双向LSTM的seq2seq字标注

    http://spaces.ac.cn/archives/3924/ 关于字标注法 上一篇文章谈到了分词的字标注法.要注意字标注法是很有潜力的,要不然它也不会在公开测试中取得最优的成绩了.在我看来,字 ...

  6. 【python3】 enumerate用法总结(转)

    http://blog.csdn.net/churximi/article/details/51648388 enumerate()说明 enumerate()是python的内置函数 enumera ...

  7. 安装QT的时候出现PATH_MAX错误

      运行c:\qt\4.5.0的configure文件的时候,出现如下的错误提示: ....\corelib\io\qfsfileengine_win.cpp(1012) : error C2065: ...

  8. [Algorithm] Check for balanced parentheses using stack

    Algorithm or program to check for balanced parentheses in an expression using stack data structure. ...

  9. innerWidth outerWidth

    在jQuery中: 一.width()方法用于获得元素宽度: 二.innerWidth()方法用于获得包括内边界(padding)的元素宽度; 三.outerWidth()方法用于获得包括内边界(pa ...

  10. 页面显示This is the initial start page for the WebDriver server.的解决办法

    今天在做项目的时候,遇到一个奇怪的问题,打开浏览器是正常的,但是页面不会跳转到需要的URL,而是提示一行白字,如图: 反复研究了脚本,没有问题啊,但是就是不跳转. 后来查了下,在某论坛上找到了答案: ...