从python脚本获取函数和系统调用

时间:2017-06-01 08:50:01

标签: python python-2.7 python-3.x

是否有可用的工具,包或模块给我详细的来电和被叫功能,所有功能调用和系统调用?

2 个答案:

答案 0 :(得分:1)

您可以使用inspect模块:

  

检查模块提供了几个有用的功能来帮助获取   有关活动对象的信息,例如模块,类,方法,   函数,回溯,框架对象和代码对象。例如,   它可以帮助您检查类的内容,检索源   方法的代码,提取和格式化函数的参数列表,   或获取显示详细追溯所需的所有信息。

     

此模块提供四种主要服务:类型   检查,获取源代码,检查类和函数,以及   检查解释器堆栈。

答案 1 :(得分:1)

如果你想对你的应用程序进行概要分析,你可以在python中用不到20行编写自己的Stack采样器。

import collections
import signal

class Sampler(object):
   def __init__(self, interval=0.001):
        self.stack_counts = collections.defaultdict(int)
        self.interval = 0.001

    def _sample(self, signum, frame):
       stack = []
        while frame is not None:
            formatted_frame = '{}({})'.format(frame.f_code.co_name,
                                              frame.f_globals.get('__name__'))
            stack.append(formatted_frame)
            frame = frame.f_back

        formatted_stack = ';'.join(reversed(stack))
        self.stack_counts[formatted_stack] += 1
        signal.setitimer(signal.ITIMER_VIRTUAL, self.interval, 0)

    def start(self):
        signal.signal(signal.VTALRM, self._sample)
        signal.setitimer(signal.ITIMER_VIRTUAL, self.interval, 0)

调用Sampler.start()将设置Unix信号ITIMER_VIRTUAL在interval指定的秒数后发送。这将基本上创建一个重复警报,将运行_sample方法。

当信号触发时,_sample函数将保存应用程序的堆栈,并跟踪我们对同一堆栈进行采样的次数。经常采样的堆栈对应于应用程序花费大量时间的代码路径。

here

借来的代码