python函数调用关系图_Python中动态与静态 Call Graph(调用关系图)分析工具

本文介绍了Python动态和静态Call Graph分析工具,包括pycallgraph和pyan。pycallgraph用于动态调用图分析,需要程序运行记录;pyan则进行静态调用图分析,无需运行程序,更快速便捷。文中提供了安装指南和使用示例,对于理解Python程序的调用关系非常有帮助。
摘要由CSDN通过智能技术生成

说明:本文中介绍的分析工具只适用于分析Python3的程序运行过程。

Call Graph 简介

调用图可以是动态的或静态的。动态调用图是程序执行的记录,因此,动态调用图尽管是准确的,但仅描述了该程序的一次运行。而静态调用图则旨在展示程序的所有可能的调用过程。确切的静态调用图是一个无法NP问题,因此静态调用图的产生算法通常只能是以overapproximations的方式去近似。也就是说,在图中表示的一些调用关系,可能在实际的运行过程中根本不会发生。

在不同语言和场景中有不同的Call Graph 分析工具,详情参考这里。在本文中我们将会介绍适用于python代码分析的动态调用图分析工具 pycallgraph和静态调用图分析工具 pyan。前者远比后者有名,但是我们确实两个都需要。而且后者因为不需要运行程序就能直接对程序进行分析,所以更加快速便捷。

下面我们使用 pycallgraph 给出的python程序例子作为我们的分析材料:

class Banana:

def eat(self):

pass

class Person:

def __init__(self):

self.no_bananas()

def no_bananas(self):

self.bananas = []

def add_banana(self, banana):

self.bananas.append(banana)

def eat_bananas(self):

[banana.eat() for banana in self.bananas]

self.no_bananas()

def main():

person = Person()

for a in range(10):

per

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值