精华内容
下载资源
问答
  • 函数调用关系图
    2021-02-28 12:38:13

    一种静态的Java程序函数调用关系图的构建方法①

    2012 年 第 21 卷 第 5 期 计 算 机 系 统 应 用

    一种静态的Java 程序函数调用关系图的构建方法

    古 辉,李荣荣

    (浙江工业大学 计算机学院,杭州 210023)

    摘 要:在程序理解中,函数之间的调用关系是程序理解研究的重要内容。一个函数往往代表了一种具体功能

    或问题求解的实现,构建出函数调用图有助于对程序的理解。以 JAVA 语言为研究对象,介绍了几种函数调用图

    的构建方法,并比较了它们的优劣性,并在此基础上提出了一种函数调用图的构建方法

    关键词:程序理解;函数调用图;构建函数调用图

    A Static Function Calls Relationship Chart Building Methods of Java

    GU Hui, LI Rong-Rong

    (School of Computer, Zhejiang University of Technology, Hangzhou 210023, China)

    Abstract: In program understanding the research of function relationship occupies a very important position. A function

    often represents a specific performance or problem solving realization. The constructing of function invocation figure is

    very helpful to the understanding of program. This paper uses Java as research object, introduces several construction

    methods of function’s call graphics and compares with their inferiority and proposed in this foundation a function call

    figure building methods

    Key words: program understanding; functions’call graph; construction of the function call graph

    1 引言 真正的调用关系,一直是程序理解领域所关注的热点

    每个大型的程序都是通过对函数的组织和调用来 和难题。

    实现整个程序的功能要求。因此,掌握程序中各个函

    数之间的关系以及每个函数的工作流程对理解程序是 2 JAVA程序的函数调用图典型实现方法

    非常有帮助的。 类层次分析(CHA,Class Hierarchy Analysis)、快

    函数调用图是对程序中函数调用关系的一种静态 速类型分析(RTA ,Rapid Type Analysis )和独立的方

    描述。在函数调用图中,节点表示函数,边表示函数 法和域可用类型集合分析(XTA ,Separate sets for

    之间的调用关系[1] 。通过函数调用图,可以了解程序 method and fields Analysis ,对 RTA 的改进算法) ,以上

    中的函数以及函数之间的条用关系,从而辅助理解程 三种是典型的 JAVA 程序的函数调用图的构建算法。

    序的基本结构及其功能。 前两种技术是属于流不敏感分析(不用考虑类型

    由于面向对象程序设计中的多态性以及 JAVA 语 传播直接计算函数调用点中接受对象的运行时可能类

    言语法规则,在很多情况下无法在编译期间确定某些

    更多相关内容
  • C++自动生成函数调用关系图.rar
  • 自动生成函数调用关系图

    热门讨论 2013-09-06 20:21:17
    自动生成c++函数调用关系图,里面包含了所有要用到的软件,一站式服务; 通过本人亲测的使用总结; 还有使用到的配置文件(c++的),实在不会配置可以直接使用; 改一改配置文件,应该还可以生成c,java,c#语言的调用...
  • 函数调用关系图

    千次阅读 2021-09-10 14:44:11
    在对源代码走读的过程中,我们可以借助一些工具来帮助理解源代码的结构和函数调用关系,比如生成函数调用关系图。 cflow工具通过分析一组C源文件,绘制出程序的逻辑流程图和交叉引用列表,在此分析结果的基础上,...

    概述

    在对源代码走读的过程中,我们可以借助一些工具来帮助理解源代码的结构和函数调用关系,比如生成函数调用关系图。


    cflow工具通过分析一组C源文件,绘制出程序的逻辑流程图和交叉引用列表,在此分析结果的基础上,通过其他工具生成可视化的图像文件,帮助我们理解源代码。


    环境


    centos:CentOS release 7.0 (Final)或以上版本
    freeswitch:v1.8.7
    GCC:4.8.5


    工具安装


    cflow安装

    wget https://ftp.gnu.org/gnu/cflow/cflow-latest.tar.gz
    tar -zxvf cflow-latest.tar.gz
    cd cflow-1.6
    ./configure
    make
    make install

    tree2dotx脚本地址,shell脚本,拷贝到本地文件直接使用

    https://github.com/tinyclub/linux-0.11-lab/blob/master/tools/tree2dotx

    graphviz安装

    yum install graphviz

    使用方法


    进入tree2dotx脚本所在目录,按照下面的步骤操作:

    cflow -T -m main /root/freeswitch-1.8.7/src/switch.c > fs.txt
    cat fs.txt | ./tree2dotx > fs.dot
    dot -Tbmp fs.dot -o fs.bmp

    下载fs.bmp文件,打开查看


     

    总结

     
    工具挺有趣的,但是对于freeswitch这种调用比较复杂的流程,图片看起来也比较复杂,和我使用工具的本意有差距,希望对大家有所帮助。


    空空如常

    求真得真

    展开全文
  • 免费软件,可自动分析C/C++/Java/Python/C#/Objective-C等项目的源代码并生成函数调用关系图,支持源代码定位,可快速查找调用链
  • IDEA函数调用关系图插件

    千次阅读 2022-03-11 13:46:10
    Call Graph是一款IDEA插件,用于可视化基于IntelliJ平台的IDE的函数调用图。 这个插件的目标是让代码更容易理解,有助于读懂和调试代码。 ...安装后,通过View - Tool Windows - Call Graph ...查看调用关系图 ...

    Call Graph是一款IDEA插件,用于可视化基于IntelliJ平台的IDE的函数调用图。

     

    这个插件的目标是让代码更容易理解,有助于读懂和调试代码。

    安装插件

     安装后,通过View - Tool Windows - Call Graph ,激活窗口

     

    激活后,需要先Build graph,让插件分析java代码,可以选择对整个工程或者针对某个项目。

    然后点击Run.

    选择你要看的函数所在模块

    查看调用关系图

    展开全文
  • 二、基于CodeViz, CodeViz是《Understanding The Linux Virtual Memory Manager》的作者Mel Gorman写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有egypt、ncc)。属于编译器级别的...

    一、基于 Doxygen或 lxr 的API形式的文档系统。

    二、基于CodeViz, CodeViz是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的open source工具(类似的open source软件有 egypt、ncc)。属于编译器级别的分析工具。

    三、基于cflow、dot(即graphviz)等系列软件。属于源码直接解析类的分析工具。

    四、基于egypt, 比较推荐这个,因为它支持 arm。它不用大动干戈地给编译器打补丁,而是让编译器自己dump出调用关系,然后分析分析,交给Graphviz去绘图。属于编译器级别的分析工具。

    一、略。

    二、基于CodeViz,主要是Graphviz + CodeViz,一个分析,一个画图。

    三、基于cflow、dot(graphviz)。用于源码分析比较合适,无法从编译器视角去分析。参看:

    www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/?utm_source=tuicool&utm_medium=referral

    值得说明的是,cflow无法直接对目录进行recursive分析,它只支持文件分析,即必须手动把要分析的文件指定给它,如: cflow -b  -m fib ./h/fib.c ./cc/fi.c ./ccc/fi.c

    而且,如果 ./h/fib.c  ./cc/fi.c  ./ccc/fi.c 中有重名的函数,则这些同名函数的调用关系会合并,即若./cc/fi.c 中有个函数a只调用了函数b,而./ccc/fi.c中也有个函数a只调用了函数c,则最后打印出来的结果是函数a同时调用了b和c,即合并了。

    对于cflow系列工具的使用,因为它输出的不是图形化的调用关系,因此这里推荐使用www.tinylab.org的组合工具:calltree。 它整合了cflow及graphviz并附带了一个将C 函数调用树转换为 dot 格式的脚本:tree2dotx:以 Ubuntu 为例,分别安装它们:

    $ sudo apt-get install cflow graphviz

    $ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx

    $ wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph

    $ sudo cp tree2dotx callgraph /usr/local/bin

    $ sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}

    $ sudo apt-get install gawk

    我已经把tree2dotx 及 callgraph 放入到了自己的云盘

    使用方法:

    $ callgraph -f start_kernel -d init/main.c                 #只在文件init/main.c里打印函数start_kernel里的所有调用关系图

    $ callgraph -f start_kernel -d init/main.c -F printk       #可用 -F 过滤掉不需要打印的函数

    $ callgraph -f start_kernel -d init/main.c -F "printk boot_cpu_init rest_init"      #可用 -F 过滤掉不需要打印的多个函数

    $ callgraph -f start_kernel -d init/main.c -F "printk boot_cpu_init rest_init" -D 2    # 用 -D 指定函数的搜索深度(同一个文件的)

    由于callgraph这个脚本也无法对目录进行递归统计(cflow也无法),且callgraph用*(全部匹配)这种方法不起作用,但cflow用*方法可以匹配所有文件但不能匹配目录:

    $ callgraph -f start_kernel -d init/*$ cflow -b  -m main example/* | /usr/local/bin/tree2dotx  2>/dev/null | dot -Tsvg -o ./main.svg # 档example目录里没有任何目录(即全是文件)时才能执行成功, # 若有任何目录,则执行失败$ cflow -b example/* | /usr/local/bin/tree2dotx  2>/dev/null | dot -Tsvg -o ./main.svg # 不带 -m 选项,将列出所有函数的调用关系$ cflow -b example/* | /usr/local/bin/tree2dotx -f "printk boot_cpu_init rest_init" 2>/dev/null | dot -Tsvg -o ./main.svg # 可以过滤掉 printk boot_cpu_init rest_init 函数的显示

    因此有两种方法可以做到统计目录里的所有文件:一是修改callgraph这个脚本;二是手动列出example目录下的所有文件(包含子目录)输给cflow。

    趣玩 tree2dotx

    打印目录结构:

    $ tree -L | tree2dotx | dot -Tsvg -o tree.svg

    四、基于egypt

    注意,可以在CFLAGS中加入的-O0参数,禁止编译器优化。如果不禁止优化,有些函数可能会因为优化的关系而显示不出来。

    编译时加入:

    CFLAGS = $(CFLAGS) -fdump-rtl-expand

    编译结束后,假设所有的 expand文件都位于 expand_dir 目录,则可以这样生成dot文件:

    egypt expand_dir/* > example.dot若只想用一部分文件来生成调用图,则可以指定文件:

    egypt expand_dir/f1.c.144r.expand expand_dir/f2.c.184r.expand > example.dot

    然后生成svg图片:dot example.dot -Tsvg -o example.svg

    用 -Tpng 替换 -Tsvg 可以生成png图片,不过建议生成svg图片,因为它缩放不变形不模糊。

    注意:如果函数太多,dot转换后的图片太大会打开失败,遇到这种情况可以使用dot的plain或者plain-ext格式来保存为纯文本(文本里的node指的是节点,edge指的是边,即指向),然后在纯文本里找到那些不需要的函数,重新用egypt的--omit去掉一些不需要的函数,直到dot转换后的图片能打开为止。或者直接看plain文本也可以。  纯文本里面的 solid ellipse black lightgrey 这些颜色、形状表示的是node或者edge的特征。

    egypt 的命令格式:

    egypt [--omit function,function,...] [--include-external] ... | dotty -

    egypt [--omit function,function,...] [--include-external] ... | dot

    omit

    Omit the given functions from the call graph. Multiple function names may be given separated by commas.

    include-external

    Include calls to external functions in the call graph. A function is considered external if it is not defined in any of the input files. For example, functions in the standard C library are external. Only direct function calls will be displayed; there is no way to display the action of taking the address of an external function.

    分析函数调用关系图(call graph)的几种方法

    绘制函数调用关系图对理解大型程序大有帮助.我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历.如果运气好一点,借助调试器的单步跟踪功能和call sta ...

    用CodeViz绘制函数调用关系图(call graph)

    CodeViz是(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...

    用callgraph生成的函数调用关系图

    Wu Zhangjin 创作于 2015/04/05 评论打赏 By Falcon of TinyLab.org 2015/04/03 1 故事缘由 源码分析是程序员离不开的话题.无论是研究开源项目, ...

    用callgraph生成的两张函数调用关系图

    参考这里,感觉很Cool吧. Linux-0.11函数调用关系图: QEMU函数调用关系图:

    python函数调用关系图(python call graph)

    由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具.(内网没装好graphviz,还没真正用 ...

    [转] 使用CodeViz生成C/C++函数调用关系图

    运行环境:虚拟机下的Ubuntu 11.04 结合Graphviz工具,使用CodeViz可以生成直观和漂亮的C/C++程序函数之间的调用关系图. 1.安装graphviz 在安装CodeViz之前, ...

    使用Idea当中的快捷键快速查看继承关系或其图表的两种方法

    一.Idea当中有两种方法可以查看继承关系 在Idea当中选中一个类,然后按Ctrl+H,可以快速查看当前所选类的继承关系,如下图: ​ 同样选中一个类,按CTRL+ALT+U,即可生成当前类的继承关 ...

    C语言不使用加号实现加法运算的几种方法

    今天看到的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...

    华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)

    题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...

    随机推荐

    x-editable 的使用方法

    1.首先在html网页中定义一个a标签(如下是asp.net的语法)

    JS 保留小数点后面2位小数

    1. 最笨的办法....... [我就怎么干的.........] function get(){    var s = 22.127456 + "";    var str = ...

    ORA-01036: 非法的变量名/编号 解决方案

    今天又一次遇到了 ORA-01036: 非法的变量名/编号 的问题,之前在项目中也遇见过这个问题,但是具体怎么解决的忘记了,今天又是遇见了,花了半个小时才解决.我今天遇到的情况是这样的: 存储过程中有 ...

    poj-2337(欧拉回路输出)

    题意:给你n个字符串,每个字符串可以和另一个字符串连接的前提是,前一个字符串的尾字符等于后一个字符串的首字符,问你存不存在欧拉通路并输出 解题思路:基本标准流程,建图:把一个字符串可以看作一条首字符指 ...

    day05流程控制while循环 流程控制for循环

    1.什么是循环:循环就是重复做某事 2.为何要有循环:为了计算机能够具备人重复做某事的能力 3,.如何用循环: 1.结束while循环的两种方法:1.修改条件:等到下一次循环开始时判断,条件为假才会结 ...

    Vue--项目开发之实现tabbar功能来学习单文件组件2

    上一篇文章里item.vue里的span标签内容是写死了,但是我们不希望写死 所以对于五个tab选项的标题需要从外部传入,也就说 需要在item.vue里的script里写上 export defau ...

    Win7 VS2013环境使用cuda_7.5.18

    首先得吐槽下VS2015出来快一年了CUDA居然还不支持,没办法重装系统刚从2013升到2015,还得再装回一个2013用,只为学习CUDA... 然后安装的时候,如果你选择自定义组件安装,注意不要改 ...

    svn其它

    参考地址: http://www.cnblogs.com/mymelon/p/5483215.html

    python写入csv文件的几种方法总结

    生成test.csv文件 #coding=utf- import pandas as pd #任意的多组列表 a = [,,] b = [,,] #字典中的key值即为csv中列名 dataframe ...

    JS踩过的坑

    一:DOM对象的查找 DOM的查找到的对象,除byID的之外,返回的都是一个数组,并不是DOM对象无法调用DOM对象的方法. 通过id查找: 因为id在一个HTML文件中唯一,因此查找到的只会是一个元 ...

    展开全文
  • 这篇文档介绍怎样使用Doxygen+Graphviz+HtmlHelp 生成函数调用关系图
  • 绘制函数调用关系图对理解大型程序大有帮助。我想大家都有过一边读源码(并在头脑中维护一个调用栈),一边在纸上画函数调用关系,然后整理成图的经历。如果运气好一点,借助调试器的单步跟踪功能和call stack窗口,...
  • 根据linuxcnc中的轨迹规划模块勾画的函数调用关系图以及一些注释,尚未完全完成,但耗费本人一周多时间。此文档对于立志于研究linuxcnc以及运动控制插补算法的人大有裨益。
  • 介绍了6种导出python源码的函数调用关系图的方法
  • callgraph生成函数调用关系图

    千次阅读 2020-09-30 11:06:43
    有时候要给别人讲函数调用关系图,用文字描述只是一维的,呈现得不直观,用嘴去描述全靠听者在脑袋中构建调用关系,讲的时间长了,或者调用关系复杂时,就会忘记。所以有必要使用二维的工具,这里介绍一下call ...
  • 点击relation window 参考文章:Source Insight怎么生成函数调用关系图
  • C ++源代码自动分析工具,得到UML类图,函数调用关系及相关文档 配置:--java 自行配置JDK --graphviz sudo apt install graphviz --libclang sudo apt-get install libclang-dev sudo ln -s /usr/lib/llvm...
  • 比如说现在有三个函数,A和B顺序执行,C是有条件调用,如果我要表现A、B、C以及A1、A2、B1等的关系,应该如何画图? 谢谢大家!! A(){ A1(); A2(); } B(){ B1(); if(...true) C(); } C(){ ... }
  • 静态分析 C 程序函数调用关系图

    千次阅读 2019-05-16 18:24:03
    静态分析 C 程序函数调用关系图参考教程本文详述在Linux环境下cflow + graphviz的方法。环境为linux16.041.安装Callgraph2.下载安装tree2dotx和Callgraph3.问题解决:4.具体应用命令和功能说明1)callgraph --help2...
  • 在 Linux 环境下,借助工具 Code Vize 可提取出开源软件中函数以及函数之间的依赖关系,并将分析结果以文本形式输出到文件中,然后借助于可视化工具 Graphviz 可将节点以及节点之间的依赖关系以图形化的方式 展示...
  • 现在我想在Class B中调用 Class A中的函数a()。此处介绍三种调用方法: 方法一: 在Class B中所定义的fuction()中声明Class A的对象a,然后用对象a来调用Class A的函数a(). 最后在main中声明Class B的对象b,让b调用...
  • 时间:2021年8月25日14:36:47 参考资料如下: 绘制函数调用图(call graph)(1):专栏开篇_许振坪的专栏-CSDN博客_函数调用关系图怎么画 绘制函数调用图(call graph)(4):doxygen + graphviz_许振坪的专栏-...
  • python函数调用关系分析

    千次阅读 2022-03-22 15:25:23
    Profile,可以将工程运行时各函数调用次数和所用时间记录下来,提供静态数据和关系图表两种表达方式。 只需轻轻一点,统计数据和图表关系一览无遗,确实方便。但是此方法局限性很大,一是必须使用pycharm,这样...
  • 函数调用关系/结构Callgraph

    万次阅读 2019-02-26 14:32:08
    输入对应编号后会自动生成函数调用图,默认使用Chrome/Chromium浏览器打开,生成的函数调用关系图与文件在同一目录下,以 .svg 结尾. 若没有安装Chrome/Chromium浏览器,则可以制定使用Ubuntu自带的firefox...
  • 看源码的时候,心血来潮想弄一下函数之前的调用关系,想起以前doxygen配合graphviz使用可以生成比较直观的函数调用关系图,但是前提是函数的注释需要严格按照doxygen的规范,具体可以自己去搜索一下,当然使用source ...
  • 代码函数调用关系图

    万次阅读 2017-09-08 10:50:00
    代码函数调用关系 Graphviz + CodeViz ...Callgraph :静态分析 C 程序函数调用关系图cflow+graphviz +tree2dotx http://www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/
  • Source Insight 查看函数调用关系使用技巧_lyndon-CSDN博客 图形化显示 Python 函数之间的调用关系 - 李荣洋 - 博客园 Doxygen + graphviz + Windows Help Workshop生成函数调用和chm文件_第七宇林的博客-CSDN...
  • 函数调用关系工具

    2021-10-29 11:31:29
    doxygen:使用graphviz生成静态调用/继承关系图 cflow:GNU cflow能够生成C程序的直接调用图和反向调用图 egypt:一个小型Perl脚本,使用gcc和Graphviz生成C程序的静态调用图。 Analizo:计算源代码度量,生成依赖...
  • C/C++ 函数调用关系图

    万次阅读 2017-03-13 14:39:19
    对于一个程序员来说,拥有一个函数调用关系图是一种莫大的幸福,一方面可以理清代码流程,另一方面,能有直观的方式了解整体代码框架,以免在分析代码时走入一个无归途的死胡同而不能自拔,以至于忘记了整体轮廓。...
  • 并且,在查看源码的过程中,发现很多底层的函数都会被重复调用,因此把函数的层次调用关系的形式表示出来很有必要。一方面,可以更加清晰的掌握函数的实现过程;另一方面,快速的把最底层的一些
  • Source Insight 查看函数调用关系使用技巧

    千次阅读 多人点赞 2021-11-23 22:08:54
    用处 要想了解大型工程的运行原理和过程,分析其函数调用关系是一个很有用的方法。比起自己一个个搜索、记录,使用工具效率会更高。Source Insight 就有一个显示函数调用关系的功能,非常好用。 PS:之前我都是手动...
  • 用VScode绘制函数调用流程

    千次阅读 2022-05-28 08:36:54
    在C++编程中有时候需要画出多个class类之间的调用关系,可以使用Visio画UML类图来实现,也可以使用VScode的函数头+箭头来实现。这里介绍使用VScode里的函数头+箭头来绘制调用流程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,105,361
精华内容 442,144
关键字:

函数调用关系图