Python中的简单按需函数调用树?

Python中的简单按需函数调用树?,python,debugging,callstack,Python,Debugging,Callstack,我正在处理一个项目,其中有大量对存储为callable实例的函数的调用,而我唯一的“调试”方法就是在stdout上编写。此外,该项目是大规模嵌套和整体式的,因此只需添加print/logging语句即可查看正在发生的事情,这会导致大量混乱的输出,在最好的情况下,这只会告诉我下一条语句的放置位置 由于我无法轻松改变这种情况,我想知道是否有可能从一个特定的调用中获得一个可读的调用树(包含函数、文件和参数)(而不是让Python打印所有调用,这会导致数百万行代码,而这些代码不会告诉我太多) 很好,大概

我正在处理一个项目,其中有大量对存储为
callable
实例的函数的调用,而我唯一的“调试”方法就是在
stdout
上编写。此外,该项目是大规模嵌套和整体式的,因此只需添加
print
/
logging
语句即可查看正在发生的事情,这会导致大量混乱的输出,在最好的情况下,这只会告诉我下一条语句的放置位置

由于我无法轻松改变这种情况,我想知道是否有可能从一个特定的调用中获得一个可读的调用树(包含函数、文件和参数)(而不是让Python打印所有调用,这会导致数百万行代码,而这些代码不会告诉我太多)

很好,大概是这样的:

with function_call_tracer():
    result = tree.handler_fn()(args)
生产类似于

result = tree.handler_fn()(args=(1,2,3)) [<bound method foo.handler_fn of <Bar object at 0x7fe7748a9610>>]
> do_something(v=(1,2,3)) [<function do_something at 0x7fe778748a96>]
> > calc1(a=1)) [<calc1 do_something at 0x7fe577748a96>]
> > calc2(a=2)) [<calc2 do_something at 0x7fe756748a67>]
> > calc3(a=3)) [<calc3 do_something at 0x7dfe77435a78>]
> ...
> > ...
> > > ...
ant有
pdb
sys.set\u trace
等等,但是我还没有弄清楚如何提取信息,什么函数调用了什么其他函数,使用什么参数,我可以在代码中的某个地方激活它,然后停用它

也许我只是不按预期使用它们-如何从包含参数的函数调用中获得调用树

import trace, sys
tracer = trace.Trace(trace=1, count=1)
tracer.runfunc(lambda: ruleset.valuespec().transform_value(param_copy)) \
    .results() \
    .write_results(show_missing=True, coverdir=".")