linux 跟踪程序执行过程,用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪
用pvtrace和Graphviz實(shí)現(xiàn)對(duì)linux下C程序的函數(shù)調(diào)用跟蹤
用pvtrace和Graphviz實(shí)現(xiàn)對(duì)linux下C程序的函數(shù)調(diào)用跟蹤
1:功能介紹,使用本方法可以實(shí)現(xiàn)linux下C應(yīng)用程序的調(diào)用跟蹤。對(duì)于了解大型的程序的運(yùn)行過程,和函數(shù)的調(diào)用情況分析很有幫助。
2:用到的開源軟件的安裝
2.1 pvtrace
如果你的linux不支持解壓*.zip最好在windows下解壓后copy到linux下。
解壓后有以下幾個(gè)文件
在linux上安裝pvtrace
需要root權(quán)限
$ make
$ make install
2.2 Graphviz
Graphviz也是一個(gè)開源項(xiàng)目,可以將pvtrace生成的*.dot文件轉(zhuǎn)成圖片格式便于查看。Graphviz的下載地址http://www.graphviz.org/Download..php
有針對(duì)多種操作系統(tǒng)的,我們這里用windows版安裝簡(jiǎn)單且方便使用
安裝后有以下工具:
3:對(duì)要跟蹤工程的修改
3.1我們先用一個(gè)小程序?qū)W習(xí)一下使用過程。
首先:先寫一個(gè)小的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
執(zhí)行:
$ gcc -g
-finstrument-functions test.c instrument.c -o test再:$
./test可以看到多了一個(gè)trace.txt$ lsinstrument.c test.ctest trace.txt然后再:$
pvtrace test得到 graph.dot$ lsgraph.dot test trace.txtinstrument.c
test.c將graph.dot拷貝到widows下運(yùn)行g(shù)raphviz的dot模式(我們?cè)?.2安裝的)將它轉(zhuǎn)化成圖像。
輸出的test.jpg
3.2
以capwap的跟蹤為例
我們?cè)谶@里以開源的capwap為例
首先將instrument.c拷貝到capwap所在的目錄
$ ls
……………………………….
instrument.c
……………………………….
$ vim Makefile
其次,在Makefile里添加(紅色字為注釋)
DEBUG = 1
這主要是為了調(diào)試方便,如果不需要跟蹤就把DEBUG指設(shè)成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 是在編譯選項(xiàng)中加入調(diào)試信息。是必須的。
AC_OBJS +=
instrument.o
WTP_OBJS +=
instrument.o
這兩項(xiàng)是將instrument.c
與程序一起編譯了
然后
$ make
$ ./AC
會(huì)生成trace.txt
$ qvtrace AC
會(huì)生成 graph.dot
然后同test一樣,用graphviz轉(zhuǎn)成圖像格式。如下:
總結(jié)
以上是生活随笔為你收集整理的linux 跟踪程序执行过程,用pvtrace和Graphviz实现对linux下C程序的函数调用跟踪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式 linux 程序不能运行,嵌入式
- 下一篇: linux 其他常用命令