为了为我的代码构建一个专门的调试器,我想跟踪代码中的一些函数,并记录它们在每次调用中接收到的参数。
我希望能够做到这一点,而不需要向每个函数添加代码行,甚至不需要在所有函数周围添加装饰器,而是在整个运行过程中设置跟踪。
这有点类似于您可以在sys模块中使用sys.settrace执行的操作:https://docs.python.org/2/library/sys.html
除了据我所知跟踪不包括函数的参数。
所以我想写一个函数,看起来像这样:
def tracing_func(func_name, args):
if func_name in ['func', 'foo']:
log_func_args(func_name, args)
其中log_func_args将其记录在文件中以供以后分析。
然后将此函数设置为每当调用代码中的任何函数时都会调用,并带有函数的名称和参数。
这能做到吗?
2条答案
按热度按时间mec1mxoz1#
所以sys.settrace做得很好:
https://docs.python.org/2/library/sys.html#sys.settrace
还有一个例子:
https://pymotw.com/2/sys/tracing.html
注意你传递给settrace的函数必须返回一个对自身的引用(或者返回一个对另一个函数的引用,以便在该作用域中进一步跟踪)。
ubof19bj2#
你应该尝试
python-hunter
。可以通过设置环境变量就地配置或神奇地配置。我刚刚从cookbook编译的一些脚本:~/bin/ptrace
:像这样执行: