用 Graphviz 可视化函数调用
来源:互联网 发布:数据库开发是做什么的 编辑:程序博客网 时间:2024/04/29 08:10
主要参考来自这里,http://www.ibm.com/developerworks/cn/linux/l-graphvis/
主要操作
- 安装graphviz,在fedora下yum install graphviz-devel。
- 从IBM的deveopworks的网页下载pvtrace, 并编译安装之,详见其说明。
- gcc -g -finstrument-functions test.c instrument.c -o test
- ./test
- pvtrace test
- dot -Tjpg graph.dot -o graph.jpg
例中test.c的代码为
#include <stdio.h> int c(void){ int p; p = 0; return 0;}int b(void){ c(); c(); c(); printf("fd"); return 0;}int a(void){ int i = 0; for(i=0; i < 200; i++){ b(); } for(i=0; i < 1200; i++){ c(); } return 0;}int main(){ a(); b(); c(); a(); c(); return 0;}得到的结果如下
大功告成!
思考1
多个文件可以工作么?
于是增加tr.h 和tr.c 修改test.c
tr.h
int d(void);
tr.c
int d(void){ int t; return 0;}test.c
#include <stdio.h>#include "tr.h"int c(void){ int p; p = 0; return 0;}int b(void){ c(); c(); c(); printf("fd"); return 0;}int a(void){ int i = 0; for(i=0; i < 200; i++){ b(); d(); } for(i=0; i < 1200; i++){ c(); } return 0;}int main(){ a(); b(); c(); a(); c(); return 0;}重新编译执行,得到 下图,可见多个文件可以工作。
思考2
有心的读者,也许已经看出来了,在第一个例子中没有输出对库函数printf的调用。是不是就是这样的呢。特将tr.c 编译为动态库。
- gcc -shared tr.c -o libdzc.so
- gcc -g -ldzc -L. -finstrument-functions test.c instrument.c -o test
- export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
- 之后就是重复上述过程。得到与第一个例子相同的图。
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用 Graphviz 可视化函数调用
- 用Graphviz可视化函数调用
- 串口操作类
- Oracle 起步日记(7)——触发器
- Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
- IOS学习笔记 — UITextField 输入完毕关闭键盘方法
- WM/WinCE 下访问Sqlite的Native C++封装 (CppSQLite3U的使用)
- 用 Graphviz 可视化函数调用
- fedora16 设置 gedit软件的默认编码
- 第16回 为了管理任务的等待状态而存在的数据结构
- HDOJ ACM Step:Charter1,1.1.1——1.1.8(1089/1090/1091/1092/1093/1094/1095/1096)
- Java内存管理分析
- Android的文件系统结构
- flyCoding
- 从数据库中读取TimeStamp值(Sql server)
- 内核同步机制——信号量