用 Graphviz+pvtrace 可视化函数调用

简介:

1、要有代码,随便写个小程序,如下所示。

#cat test.c

复制代码
#include <stdio.h>
#include <string.h>

void haha();
void hehe()
{
    printf("int hehe\n");
    haha();
}

void test()
{
    printf("hehe test\n");
    hehe();
    haha();
}

void haha()
{
    printf("in haha\n");
}

int main()
{
    test();
    printf("hello world !\n");

    return 0;
}
复制代码

2、要下载一个叫pvtrace的解析工具,我把它放到了百度网盘上:http://pan.baidu.com/s/1sj23YPJ

这个工具解压后的文件如下

复制代码
# unzip pvtrace.zip
[root@localhost pvtrace]# ls
instrument.c  Makefile  stack.c  stack.h  symbols.c  symbols.h  trace.c
复制代码

之后编译、安装

复制代码
[root@localhost pvtrace]# make
gcc  -Wall -c trace.c
gcc  -Wall -c symbols.c
gcc  -Wall -c stack.c
gcc -o pvtrace trace.o symbols.o stack.o
[root@localhost pvtrace]# make install
cp pvtrace /usr/local/bin
复制代码

3、把pvtrace目录下的instrument.c文件放到你的项目下

# ls
instrument.c  Makefile  test.c

修改Makefile,编译test.c的时候把这个源文件加上。还有就是在编译选项中加上这个参数 -finstrument-functions

编译自己的项目:

复制代码
# make
gcc -g -c -o test.o test.c -I../../include -g -finstrument-functions
gcc -g -c -o instrument.o instrument.c -I../../include -g -finstrument-functions
gcc -g -o test test.o instrument.o -L./
复制代码

4、现在开始生成函数调用的流程图了

运行自己的项目test

# ./test

:这里有个问题是你的程序运行多少,它记录多少函数之间的关系。你运行的少,它就记录的少,运行的多久记录的多。也就是说,那些暂时没有运行的代码,是不能被记录的。这个在原文章中有说明,因为人家记录的时候就是在运行的时候记录的嘛。

运行完成后会生成一个叫做trace.txt的文件

# ls
instrument.c  instrument.o  Makefile  test  test.c  test.o  trace.txt

接下来使用pvtrace解析这个文件,但是pvtrace后面跟的参数不是trace.txt,而是我们的程序test

复制代码
[root@localhost drawFuncPic]# pvtrace test
[root@localhost drawFuncPic]# ls
graph.dot  instrument.c  instrument.o  Makefile  test  test.c  test.o  trace.txt
复制代码

生成了gaph.dot文件,接下来就是使用Graphviz的dot工具,把这个graph.dot变成一个图片了。

复制代码
[root@localhost drawFuncPic]# dot -Tjpg graph.dot -o graph.jpg
[root@localhost drawFuncPic]# ls
graph.dot  graph.jpg  instrument.c  instrument.o  Makefile  test  test.c  test.o  trace.txt
复制代码

注:没有Graphviz的话可以去官网下载或者使用命令“#yum install graphviz”进行安装:

复制代码
# yum install graphviz
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.btte.net
 * extras: mirrors.yun-idc.com
 * updates: mirrors.opencas.cn
Setting up Install Process
Package graphviz-2.26.0-10.el6.x86_64 already installed and latest version
Nothing to do
复制代码

我这里有一个安装graphviz的笔记:http://www.cnblogs.com/fengbohello/p/4689131.html

生成的流程图如下:

 



本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4904182.html,如需转载请自行联系原作者


相关文章
|
6月前
|
数据可视化 定位技术 Python
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
705 0
|
8天前
|
机器学习/深度学习 数据可视化 索引
lasso路径可视化 python
【4月更文挑战第15天】
|
机器学习/深度学习 数据可视化 算法
|
1月前
|
数据可视化 数据挖掘 Python
Python中使用Matplotlib插件绘制曲线
Python中使用Matplotlib插件绘制曲线
25 0
|
2月前
|
人工智能 数据可视化 测试技术
Python数据可视化之Matplotlib实战Python中的装饰器:优雅而强大的函数增强工具
Python是一门强大的编程语言,它在数据科学和人工智能领域有着广泛应用。Matplotlib是Python中最常用的数据可视化库之一,它可以帮助开发者将复杂的数据呈现出来,以更好的展示和分析数据。本文将通过实例,介绍如何使用Matplotlib进行数据可视化。 在Python编程中,装饰器是一种强大的工具,可以用来增强函数的功能而不改变其结构。本文将深入探讨Python中装饰器的原理、应用及实例,帮助读者更好地理解和运用这一技术。
|
5月前
|
数据挖掘 Python
Python如何使用Matplotlib模块的pie()函数绘制饼形图?
Python如何使用Matplotlib模块的pie()函数绘制饼形图?
50 0
|
9月前
|
JSON 数据可视化 开发者
使用pycallgraph和graphviz查看函数调用图
使用pycallgraph和graphviz查看函数调用图
338 1
|
数据可视化 Linux API
Python中得可视化:使用Seaborn绘制常用图表(上)
Python中得可视化:使用Seaborn绘制常用图表
274 0
Python中得可视化:使用Seaborn绘制常用图表(上)
|
机器学习/深度学习 数据可视化 Python
Python中得可视化:使用Seaborn绘制常用图表(下)
Python中得可视化:使用Seaborn绘制常用图表
380 0
Python中得可视化:使用Seaborn绘制常用图表(下)
|
数据可视化 算法 数据挖掘
缺失值可视化Python工具库:missingno
缺失值可视化Python工具库:missingno
缺失值可视化Python工具库:missingno

热门文章

最新文章