@Data : 2019/03/12
@Author : lwp
mytrace 是一款 C 语言的函数动态调用关系追踪程序.(程序运行时未执行到的函数不会被追踪)
make
make install- 使用 gcc 的
-g -finstrument-functions选项将instrument.c文件与要追踪分析的程序(例如:test1.c,test2.c,test3.c)编译成可执行程序test.
gcc -g -finstrument-functions instrument.c test1.c test2.c test3.c -o test2.执行 test 可执行文件, 会在 test 执行目录下生成追踪文件 trace.txt 文件.
./testtrace.txt 文件内容形式如下:
E0x40b5b4
E0x44affc
X0x44affc
E0x40c747
E0x427881
X0x427881
X0x40c747
X0x40b5b4
E0x40b5b4 代表的是进入函数 0x40b5b4;
X0x40b5b4 代表的是退出函数 0x40b5b4;
0x40b5b4 则代表的是函数的地址.
3.使用 mytrace 程序分析 trace.txt 文件, 将函数地址转换成函数名.
mytrace test trace.txt会在终端输出类似下列形式的函数调用关系:
--> main()
--> test1()
<-- test1()
--> test2()
--> test3()
<-- test3()
<-- test2()
<-- main()
说明:mytrace 是根据 pvtrace 改造而成的. 之所以没有使用文章中提供的 pvtrace 程序, 主要是分析大型代码(例如:nginx)时, 函数调用关系复杂, 一张图片难以明了, 故改造成了 mytrace 程序将调用关系输出到文本中, 使用 vim 查看函数调用关系还是比较方便的.