用 Graphviz + CodeViz可视化函数调用

2024-04-17 18:18

本文主要是介绍用 Graphviz + CodeViz可视化函数调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“工预善其事,必先利其器”,在分析Jpeglib的过程中,我用Graphviz + CodeViz来可视化的显示函数调用关系。
先给大家看张图片, 这是我用Graphviz + CodeViz生成的Jpeglib调用关系图, 解解馋先^_^
tbag@:~/test/ jpeg$ ../../gcc-graph/bin/gcc *.c -o tbag
tbag@:~/test/ jpeg$ genfull
tbag@:~/test/jpeg$ gengraph -d 2 -output-type "png" -f jpeg_decompress2bmp
jpeg_decompress2bmp.png

Note: 由于篇幅有限这里只显示一小张图片,具体参数会在后面解释。

  看完效果图后就要开始安装我们的工具了,以下是我从网上搜集的一些资料,再加上自己的一些总结。
安装
  1. 安装 GraphViz
     调用图的生成依赖于 GraphViz,所以首先要安装 GraphViz。可以下载源码包编译、安装。
我在这偷点懒:tbag@:~$ sudo apt-get install graphviz

    2. 简单安装 CodeViz

下载CodeVize源码包:http://www.csn.ul.ie/~mel/projects/codeviz/codeviz-1.0.11.tar.gz
解压:tbag@:~/down$ tar xvf codeviz-1.0.11.tar.gz 
tbag@:~/down$ cd codeviz-1.0.11/
   CodeViz 使用了一个 patch 版本的 GCC 编译器,而且不同的 CodeViz 版本使用的
GCC 版本也不同,可以下载 CodeViz 的源码包后查看 Makefile 文件来确定要使用的 GCC 版
本,codeviz-1.0.11 使用 GCC-3.4.6。实际上安装 CodeViz 时安装脚本会自动下载对应的 GCC
并打 patch,但是这里我们是分步安装,还是清楚一点好, 先安装gcc再回来安装CodeViz。
3. 安装 GCC 
   下载gcc-3.4.6.tar.gz到 cd codeviz-1.0.11目录下的compilers里。
下载地址:ftp://ftp.mirrorservice.org/site ... cc/releases/gcc-3.4
.6/gcc-3.4.6.tar.gz
    CodeViz 的安装脚本 compilers/install_gcc-3.4.6.sh 会自动检测 compilers 目录下
是否有 gcc 的源码包,若是没有则自动下载并打 patch,这里前面已经下载,直接移到该
目录即可,则剩下的就是解压安装了。install_gcc-3.4.6.sh 会解压缩 gcc,打 patch,并将
其安装到指定目录,若是没有指定目录,则缺省使用$HOME/gcc-graph,通常指定/usr/
local/gcc-graph(这时需要 root 权限)。
tbag@:~/down/codeviz-1.0.11$ cd compilers/
tbag@:~/down/codeviz-1.0.11/compilers$ ls
gcc-3.4.6.tar.gz  gcc-graph  gcc-patches  install_gcc-3.4.6.sh
tbag@:~/down/codeviz-1.0.11/compilers$ ./install_gcc-3.4.6.sh 
接下来就可以去喝杯咖啡了。。。。。
安装 CodeViz
tbag@:~/down/codeviz-1.0.11$ ./configure
tbag@:~/down/codeviz-1.0.11$ make
   # make (这里不需要是因为在脚本中不会检测是否已经 make 了 gcc-3.4.6,前
面已经作过了,所以只要安装 codeviz 即可。编译的目标只是 gcc-3.4.6,codeviz 不需要编
译。具体查看 Makefile 文件)

tbag@:~/down/codeviz-1.0.11$ make install-codeviz
(前面已经安装了 gcc,所谓的安装 codeviz 只是将make install-codeviz
脚本 genfull 和 gengraph 复制到/usr/local/bin 目录下。codeviz 需要 perl 库的支持,我
的系统上缺省安装了 perl,所以没有出现什么问题。若是安装出现问题,则查看
configure 和 Makefile 确定需要安装哪些库即可)
        目前为止,CodeViz 安装完成了,下面看一下它的使用吧。
4.使用
    GraphViz 支持生成不同风格的调用图,但是一些需要安装额外的支持工具或者库程序,
有兴趣的朋友可以到 http://www.graphviz.org 上查找相关资料。这里重点讲述 CodeViz 的
使用方法,具体的图像风格控制不再详述。
    CodeViz 使用两个脚本来生成调用图,一个是 genfull,该脚本可以生成项目的完整调
用图,因此调用图可能很大很复杂,缺省使用 cdepn 文件来创建调用图;另一个是
gengraph,该脚本可以对给定一组函数生成一个小的调用图,还可以生成对应的
postscript 文件。安装时这两个脚本被复制到/usr/local/bin 目录下,所以可以直接使用
而不需要指定路径。
    5.编译
    打了 patch 的 gcc/g++为编译的每个 C/C++文件生成.cdepn 文件,该文件包含函数调
用信息、声明信息等等。
演示:
1)  tbag@:~/test/ jpeg$ ../../gcc-graph/bin/gcc *.c -o tbag
2)  tbag@:~/test/ jpeg$ genfull
3)  tbag@:~/test/jpeg$ gengraph -d 2 -output-type "png" -f jpeg_decompress2bmp

第一步,使用刚刚安装的gcc-3.4.6来编译当前目录下所有.c文件,gcc/g++为编译的每个 C/C++文件生成.cdepn 文件。
第二步:使用此脚本会在当前目录生成一个full.graph文件,该脚本可以生成项目的完整调
用图信息文件, 因此调用图信息文件可能很大很复杂, 缺省使用 cdepn 文件来创建调用图信息文件;
第三步:该脚本可以对给定一组函数生成一个小的调用图,  ‘-d 2’参数是只显示两层调用关系,‘ -output-type "png"’指定 输出格式为png,‘-f jpeg_decompress2bmp’指定从哪个函数开始生成调用关系图。



如果有朋友想更深入的了解使用参数,那么你肯定需要一个“男人”(man) .
以上是我的一些见解,有些地方可能不对,欢迎大家指正。

这篇关于用 Graphviz + CodeViz可视化函数调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912489

相关文章

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

AutoGen Function Call 函数调用解析(一)

目录 一、AutoGen Function Call 1.1 register_for_llm 注册调用 1.2 register_for_execution 注册执行 1.3 三种注册方法 1.3.1 函数定义和注册分开 1.3.2 定义函数时注册 1.3.3  register_function 函数注册 二、实例 本文主要对 AutoGen Function Call

PHP7扩展开发之函数调用

前言 在这篇文章中我们将演示如何在扩展中调用函数,和调用对象的方法。代码示例如下: <?phpclass demo {public function get_site_name ($prefix) {return $prefix."信海龙的博客\n";}}function get_site_url ($prefix) {return $prefix."www.bo56.com\n";}

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

Win32函数调用约定(Calling Convention)

平常我们在C#中使用DllImportAttribute引入函数时,不指明函数调用约定(CallingConvention)这个参数,也可以正常调用。如FindWindow函数 [DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]public static extern IntPtr FindWindow

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能,但它与其他Python库(如Matplotlib和Seaborn)无缝集成,允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法: 1. 使用Matplotlib Pandas中的plot()方法实际上是基于Matplotlib的,你可以使用它来绘制各种基本图表,例如折线图、柱状图、散点图等。 import pandas

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

Python利用pyecharts实现数据可视化

小编会持续更新知识笔记,如果感兴趣可以三连支持。闲来无事,水文一篇,不过上手实践一下倒还是挺好玩的,这一块知识说不定以后真可以尝试拿来做数据库的报表显示。         有梦别怕苦,想赢别喊累。 目录 前言 JSON数据格式的转换 pyecharts简介和入门使用 前言       小编我今天闲来无事,打算学习一下py,结果你猜怎么着,竟然看到py可以将数据