是否有可用的工具,包或模块给我详细的来电和被叫功能,所有功能调用和系统调用?
答案 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
借来的代码