用 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数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp