精华内容
下载资源
问答
  • 代码函数调用关系

    千次阅读 2017-09-08 10:50:00
    代码函数调用关系 Graphviz + CodeViz http://www.linuxidc.com/Linux/2015-01/111501.htm Callgraph :静态分析 C 程序函数调用关系cflow+graphviz +tree2dotx ...

    代码函数调用关系

    1. Graphviz + CodeViz
      http://www.linuxidc.com/Linux/2015-01/111501.htm
    2. Callgraph :静态分析 C 程序函数调用关系图cflow+graphviz +tree2dotx
      http://www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/
    展开全文
  • 利用graphviz软件和pycallgraph库自动生成Python代码函数调用关系_神奇小海螺的博客-CSDN博客 由于我的是Ubuntu系统,所以我安装的是Linux版本的graphviz. 参考: graphviz官网 python函数调用关系(python...

    阅读代码时经常被各种调用关系绕晕,想找一个能够自动生成调用关系图的工具,于是找到了这位大神的文章:

    参见这位大神的文章:
            利用graphviz软件和pycallgraph库自动生成Python代码函数调用关系图_神奇小海螺的博客-CSDN博客

    由于我的是Ubuntu系统,所以我安装的是Linux版本的graphviz.

    参考:

    graphviz官网

    python函数调用关系图(python call graph)_anque1234的博客-CSDN博客

    Python中动态与静态 Call Graph(调用关系图)分析工具 - 知乎

    展开全文
  • 限下两个函数调用图之间的编辑距离,得到两个函数调用图之间的相似性,进而得到两个应用 程序之间的相似性,据此对恶意软件进行检测识别.实验结果表明,该检测方法具有较高的准 确性与有效性,检测效果明显优于工具...
  • 使用 cflow 绘制函数调用图

    千次阅读 2019-03-27 10:55:06
    使用 cflow 绘制函数调用图1. 简介2. 安装cflow3. 使用cflow分析函数调用关系,生成文本文件4. 从文本文件转为dot文件5. 从dot文件转为图片文件6. 一些问题7. 总结 1. 简介 cflow是一款静态分析C语言代码的工具,...

    1. 简介

    cflow是一款静态分析C语言代码的工具,通过它可以生成函数调用关系。
    该工具能够生成两种图:直接图和反向图。直接图以main函数(main)开始,递归地显示它调用的所有函数。相反,反向图是一组子图,以相反的顺序为每个函数的调用者绘制图表。由于它们的树状外观,图也可以称为树。
    除了这两种输出模式之外,cflow还能够生成输入文件中遇到的所有符号的一个交叉引用列表。
    该工具还提供了对输出中出现的符号的详细控制,允许省略用户不感兴趣的符号。输出图的确切外观也是可配置的。
    官网:https://www.gnu.org/software/cflow/
    下载:http://ftp.gnu.org/gnu/cflow/
    手册:https://www.gnu.org/software/cflow/manual/index.html
    如果你英文可以,上面的手册就是很好的使用教程,本文只是简单的介绍下如何使用cflow,旨在让新手快速入门cflow而已。

    2. 安装cflow

    在linux下安装cflow很简单,如下是我在Ubuntu下的安装命令:

    # sudo apt-get install cflow
    # cflow --version
    cflow (GNU cflow) 1.4
    

    由于cflow依赖gawk,你的环境有可能是mawk,所以还得安装下gawk:

    # sudo apt-get install gawk
    

    3. 使用cflow分析函数调用关系,生成文本文件

    举个简单的例子,以下是源文件whoami.c内容(源码来自官网手册):

    /* whoami.c - a simple implementation of whoami utility */
    #include <pwd.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int who_am_i(void)
    {
        struct passwd *pw;
        char *user = NULL;
    
        pw = getpwuid (geteuid ());
        if (pw)
            user = pw->pw_name;
        else if ((user = getenv ("USER")) == NULL)
        {
            fprintf (stderr, "I don't know!\n");
            return 1;
        }
        printf ("%s\n", user);
        return 0;
    }
    
    int main(int argc, char **argv)
    {
        if (argc > 1)
        {
            fprintf (stderr, "usage: whoami\n");
            return 1;
        }
        return who_am_i ();
    }
    

    运行cflow将生成以下输出:

    # cflow whoami.c 
    main() <int main (int argc, char **argv) at whoami.c:24>:
        fprintf()
        who_am_i() <int who_am_i (void) at whoami.c:7>:
            getpwuid()
            geteuid()
            getenv()
            fprintf()
            printf()
    

    尖括号中显示函数签名及其定义的位置。通常cflow打印完整的函数签名,可使用--omit-symbol-names选项省略函数名,使用--omit-arguments省略参数列表。如果你同时使用了这两种--omit-选项,上面的签名将会变成:

    main() <int () at whoami.c:24>:
    

    cflow默认是分析main函数,可以通过-m--main选项分析其他函数:

    # cflow -m who_am_i whoami.c 
    who_am_i() <int who_am_i (void) at whoami.c:7>:
        getpwuid()
        geteuid()
        getenv()
        fprintf()
        printf()
    

    要为程序中的所有顶级函数生成调用图,请使用--all-A选项,这些图将放在main图的后面(如果存在的话),并按函数名字典顺序排列。当--all使用两次时,将显示所有全局函数的图(无论是否为顶级函数)。
    要禁用对main函数的特殊处理,请使用--no-main选项。

    cflow只能以ASCII文本的形式输出函数调用关系,不能输出图片格式,对于大型项目的代码来说,庞杂的文本输出简直“惨不忍睹,无法直视”。需要其他工具的辅助,才能将本文格式转化为可读性更强的图片格式,大致步骤如下:

    1. cflow工具:输出文本格式的函数调用关系;
    2. tree2dotx脚本:将文本格式转化为dot格式;
    3. graphviz工具:将dot格式转化为图片格式;

    4. 从文本文件转为dot文件

    将cflow输出的文本文件转化为dot格式的工具有tree2dotx,是否有其他工具,有待研究。通过以下命令下载tree2dotx脚本:

    # wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx -O /usr/bin/tree2dotx
    # chmod +x /usr/bin/tree2dotx
    

    将cflow输出的文本文件转化为dot格式:

    # cflow whoami.c | tree2dotx > out.dot
    

    5. 从dot文件转为图片文件

    安装graphviz

    # sudo apt-get install graphviz
    

    将dot格式转化为图片格式:

    # dot -Tgif out.dot -o out.gif
    

    最终生成的图像如下所示:
    在这里插入图片描述

    6. 一些问题

    • cflow能同时分析一个源文件中多个函数的call graph吗?
      答:cflow默认只分析main函数的call graph,如果main不存在,将分析该文件的所有函数。可以通过 -m 选项分析指定的函数,如果指定的函数不存在,也会分析该文件的所有函数。可以利用这个特点,通过 -m 指定一个空的函数名,让cflow分析所有函数的call graph,如:
      # cflow -m= file1.c
      
    • cflow可以同时分析多个源文件吗?
      答:可以,使用如下两种命令都可以:
      # cflow -m= file1.c file2.c
      # cflow -m= *.c
      
      需要注意的是,如果多个源文件出现同名函数,cflow会警告,并且只分析其中一个main函数。
    • cflow可以分析整个目录(包括子目录)的源文件吗?
      答: 通过 cflow –help 查看帮助,我没找到有这方面的选项。

    7. 总结

    1. 使用cflow工具,分析源码,得到文本格式的函数调用关系;
    2. 使用tree2dotx脚本,将文本格式转化为dot格式;
    3. 使用graphviz工具,可视化函数调用,将dot格式转化为图片格式;

    作者:许振坪
    来源:CSDN
    原文:https://blog.csdn.net/benkaoya/article/details/79751000
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 基本概念: ...一直接看懂,直接上代码 public class Gouzao { public static Gouzao g1 = new Gouzao(); static { System.out.println("我是静态块"); } { System.out.println("我是匿名构造块");

    基本概念:

    	静态块是在类的加载时候就调用的,静态块只调用一次。
    	如果一个类中有多个静态对象,按照先后顺序调用。
    	匿名构造块是在构造函数调用前调用的。
    	构造函数是在构建函数的时候调用的。
    

    一图直接看懂,直接上代码

    public class Gouzao {
    
    public  static Gouzao  g1 = new Gouzao();
    static {
        System.out.println("我是静态块");
    }
    {
        System.out.println("我是匿名构造块");
    }
    
    public  static void cc(){
        System.out.println("我是静态方法");
    }
    
    Gouzao(){
        System.out.println("我是构造函数");
    }
    
    public static void main(String[] args) {
    
        new Gouzao();
    }
    }
    
    执行结果
    
    我是匿名构造块
    我是构造函数
    我是静态块
    我是匿名构造块
    我是构造函数
    
    展开全文
  • java 静态代码块:在类加载过程中就会加载的,初始化类的,也就是...初始化所有对象的,属于对象的,在new 的时候才会执行代码形式:{}java构造函数:只有在new 对象的时候,调用响应的构造函数对象才会调用public ...
  • 最近在研究android应用函数调用图分析,准备基于soot做代码静态分析。
  • 静态代码,C/C++代码函数调用分析工具egypt,用于生成函数调用图
  • 函数调用关系

    千次阅读 2019-04-30 15:34:08
    代码函数调用关系: Graphviz + CodeViz http://www.linuxidc.com/Linux/2015-01/111501.htm Callgraph :静态分析 C 程序函数调用关系cflow+graphviz +tree2dotx ......
  • 绘制函数调用图(call graph)(4):doxygen + graphviz

    万次阅读 多人点赞 2018-03-30 21:42:02
    doxygen 也可以生成函数调用关系,但 doxygen 能做的远不止于此,它是一款优秀的文档自动生成工具。它可以将代码中的注释转换成帮助文档(注释格式要符合 doxygen 要求才行,FFmpeg API Documentation 就是用...
  • 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学...
  • 今天我们来玩转一个小工具,叫 Callgraph,它可以把 C 语言的函数调用树(或者说流程)画出来。 传统的命令行工具 Cscope,Ctags 可以结合vim 等工具提供高效快捷的跳转,但是无法清晰的展示函数内部的逻辑关系。 ...
  • cflow是一款静态分析C语言代码的工具,通过它可以生成函数调用关系。 官网:https://www.gnu.org/software/cflow/ 下载:http://ftp.gnu.org/gnu/cflow/ 手册:https://www.gnu.org/software/cflow...
  • 为了让人能快速的理解 静态调用、动态调用,现在做一个函数封装在一个DLL中,然后在APPLICATION form里面调用这个函数,这个函数处理两个数的和。用代码和图片说话:代码如下library Project1;{ Important note ...
  • 3,装载父类A后,完成静态动作(包括静态代码和变量,它们的级别是相同的,安装代码中出现的顺序初始化) 4,装载子类B后,完成静态动作 类装载完成,开始进行实例化 1,在实例化子类B时,先要实例化父类A 2,实例化...
  • 函数调用过程

    2018-05-10 17:03:56
    所有抽象数据类型(ADT)都必须明确一件事——如何获取内存来存储值。...下面来看一个理解c程序的内存分配:从低地址到高地址分别为代码区,文字常量区,已初始化全局数据区,未初始化全局...
  • 函数调用过程分析

    2018-07-26 22:19:11
    内存空间被划分为:栈区(heap)、堆区(stack)、静态全局区、文字常量区以及函数代码区。(此处只是内存区域的大致划分,已经能够支撑后文将要讨论的内容)其结构如下所示:   栈区主要用于系统自动进行分配...
  • 每次创建实例化对象的过程中都会调用构造代码块块,且构造代码块的在构造函数之前被调用静态代码块 在Java中用static修饰的代码块,静态代码块随着类的加载而执行,且静态代码块一定在主函数main之前执行。如果...
  • 在c语言中编译的程序占用的内存分为一下几个部分: 1、栈区(stack)2、堆区(heap)3、全局区(静态区)(static)4、字符常量区 5、代码区(code)如所示: 这篇博客主要描述其中的栈区。在函数调用过程中,...
  • //在窗体类里定义静态变量 public void GetValue() { str = textBox1.Text; } public static void GetModel() { Form2 GM = new Form2(); GM.GetValue(); } } } ![![图片说明]...
  • 为了实现这个目标,你可以通过对源代码进行静态扫描得到函数调用关系,但是你无法通过这种方法获得更多的信息,(如:对某个函数调用次数,被调用函数执行了多长时间等,这些信息对于软件的优化具有很好的参考...
  • 我有一类可以在类中保存的地图上执行的静态方法,我希望在调用类时设置地图.我尝试过使用私有的构造函数,但它没有被调用.我的代码的相关部分是:public class MyClass{private static final String KEYS = "ABC";...
  • 转载自品略图书馆...它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象。下面由小编整理了几种vlookup函数的使用方法,希望对大家有所帮助。vel...
  • 接下来的两个提案,主要实现了新的引用类型和函数调用方式。 静态委托 C# 中的普通委托是一种比较复杂的数据结构。它包含一个函数指针、一个针对 this 参数的对象引用(可选),以及一个指向委托链的链接。同其他....
  • 接下来的两个提案,主要实现了新的引用类型和函数调用方式。静态委托C#中的普通委托是一种比较复杂的数据结构。它包含一个函数指针、一个针对this参数的对象引用(可选),以及一个指向委托链的链接。同其他引用类型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 945
精华内容 378
关键字:

代码函数静态调用图