用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
1:功能介绍,使用本方法可以实现linux下C应用程序的调用跟踪。对于了解大型的程序的运行过程,和函数的调用情况分析很有帮助。
2:用到的开源软件的安装
2.1 pvtrace
如果你的linux不支持解压*.zip最好在windows下解压后copy到linux下。
解压后有以下几个文件
在linux上安装pvtrace
需要root权限
$ make
$ make install
2.2 Graphviz
Graphviz也是一个开源项目,可以将pvtrace生成的*.dot文件转成图片格式便于查看。Graphviz的下载地址http://www.graphviz.org/Download..php
有针对多种操作系统的,我们这里用windows版安装简单且方便使用
安装后有以下工具:
3:对要跟踪工程的修改
3.1我们先用一个小程序学习一下使用过程。
首先:先写一个小的test.c
void aa(int i)
{
printf("%d\n",i);
}
int main()
{
printf("hellow
world\n");
aa(10);
printf("test\n");
return;
}
然后将instrument.c考到与test.c相同的目录
$ lsinstrument.c
test.c
执行:
$ gcc -g
-finstrument-functions test.c instrument.c -o test再:$
./test可以看到多了一个trace.txt$ lsinstrument.c test.ctest trace.txt然后再:$
pvtrace test得到 graph.dot$ lsgraph.dot test trace.txtinstrument.c
test.c将graph.dot拷贝到widows下运行graphviz的dot模式(我们在2.2安装的)将它转化成图像。
输出的test.jpg
3.2
以capwap的跟踪为例
我们在这里以开源的capwap为例
首先将instrument.c拷贝到capwap所在的目录
$ ls
……………………………….
instrument.c
……………………………….
$ vim Makefile
其次,在Makefile里添加(红色字为注释)
DEBUG = 1
这主要是为了调试方便,如果不需要跟踪就把DEBUG指设成0 可以放在Makefile的第一行。
ifeq ($(DEBUG),1)
CFLAGS += -g
-finstrument-functions
AC_OBJS +=
instrument.o
WTP_OBJS +=
instrument.o
endif
放在 CFLAGS AC_OBJS
WTP_OBJS 定义之后
CFLAGS += -g
-finstrument-functions 是在编译选项中加入调试信息。是必须的。
AC_OBJS +=
instrument.o
WTP_OBJS +=
instrument.o
这两项是将instrument.c
与程序一起编译了
然后
$ make
$ ./AC
会生成trace.txt
$ qvtrace AC
会生成 graph.dot
然后同test一样,用graphviz转成图像格式。如下: