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=".")