找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4002|回复: 0

Graphviz 可视化函数调用 - demo

[复制链接]
发表于 2012-2-11 19:30:19 | 显示全部楼层 |阅读模式
参考:http://www.acejoy.com/thread-3788-1-1.html
主要操作

  • 安装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>
  1. int c(void){
  2.     int p;
  3.     p = 0;
  4.     return 0;
  5. }
  6. int b(void){
  7.     c();
  8.     c();
  9.     c();
  10.     printf("fd");
  11.     return 0;
  12. }
  13. int a(void){
  14.     int i = 0;
  15.     for(i=0; i < 200; i++){
  16.         b();
  17.      }
  18.     for(i=0; i < 1200; i++){
  19.         c();
  20.     }
  21.     return 0;
  22. }
  23. int main(){
  24.     a();
  25.     b();
  26.     c();
  27.     a();
  28.     c();
  29.     return 0;
  30. }
复制代码
得到的结果如下

大功告成!

思考1 多个文件可以工作么?
于是增加tr.h 和tr.c 修改test.ctr.h
  1. int d(void);
  2. tr.c
  3. int d(void){
  4.     int t;
  5.     return 0;
  6. }test.c
  7. #include <stdio.h>
  8. #include "tr.h"
  9. int c(void){
  10.     int p;
  11.     p = 0;
  12.     return 0;
  13. }
  14. int b(void){
  15.     c();
  16.     c();
  17.     c();
  18.     printf("fd");
  19.     return 0;
  20. }
  21. int a(void){
  22.     int i = 0;
  23.     for(i=0; i < 200; i++){
  24.         b();
  25.         d();
  26.     }
  27.     for(i=0; i < 1200; i++){
  28.         c();
  29.     }
  30.     return 0;
  31. }
  32. int main(){
  33.     a();
  34.     b();
  35.     c();
  36.     a();
  37.     c();
  38.     return 0;
  39. }
复制代码
重新编译执行,得到 下图,可见多个文件可以工作。

思考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
  • 之后就是重复上述过程。得到与第一个例子相同的图。
这说明调用分析不对库函数进行分析,这正是我们所期望的。





作者:chn89 发表于2012-2-11 16:18:28 原文链接




您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 16:45 , Processed in 0.013759 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表