使用gprof2dot和graphivz生成程序运行调用图
2017-03-14 14:08
381 查看
使用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[/code] 这个工具需要python环境的支持,请提前安装好python3。2、使用gprof生成概要分析数据
2.1 gprof简介
Gprof 是GNU gnu binutils工具之一,默认情况下linux系统当中都带有这个工具。
可以显示“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。
可以显示“Call graph”,包括函数的调用关系,每个函数调用花费了多少时间。
可以显示“注释的源代码”--是程序源代码的一个副本,标记有程序中每行代码的执行次数。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.txt3、生成调用图
配置好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
相关文章推荐
- 调用 Https WebService 使用程序自动生成代理类
- 于仕琪老师《OpenCV入门教程》中某一程序在我电脑VS2008,opencv2.3.1上运行错误,“未使用调试信息生成二进制文件”,留待解决,
- 使用程序自动调用ANSYS并运行命令流文件
- SilverLight:使用MVVM实现View层在程序运行时自动生成控件并且取得其值
- 使用 rpython 在 windows 下生成的程序无法运行
- SilverLight:使用MVVM实现View层在程序运行时自动生成控件并且取得其值
- 在运行程序时报错:"如果在 Code First 模式下使用,则使用 T4 模板为 Database First 和 Model First 开发生成的代码可能无法 正常运行。若要继续使用 Database First 或 Model First,请确保在执行应用程序的 config 文件中指 定 Entity Framework 连接字符串。若要将这些从 Database First 或 Mod
- 使用installanywhere打包java文件生成任何平台都可以运行的程序(如.exe)(关闭360!)
- SilverLight:使用MVVM实现View层在程序运行时自动生成控件并且取得其值 (转)
- 使用Windows下的intellij IDEA 运行MapReduce程序远程调用Hadoop的hdfs(非Maven方法)
- 使用c#调用API函数CreateProcess来运行外部程序
- 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good
- Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)
- 第三篇:VS2012中,调用opencv库,在程序中定义了变量,编译没有问题,运行时会报错“变量使用没有定义”
- SilverLight:使用MVVM实现View层在程序运行时自动生成控件并且取得其值
- Reporting Service Tips 101(#4) - 使用RS实现报表的自动生成以及在程序中调用RS
- 使用委托异步调用方法让程序并行运行
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- 使用nohup让程序在远程主机后台运行
- 使用.NET编辑器构建和运行C#程序