Python中的跟踪函数调用

时间:2016-08-04 08:55:50

标签: python python-2.7 stack-trace abstract-syntax-tree trace

我需要根据来自根文件的被调用函数来跟踪函数调用 它应该显示函数调用序列而不包括系统函数 解决这个问题的最佳方法是什么 到目前为止我尝试过的 使用AST在根页面上获取函数调用,然后打开所有导入文件并搜索函数定义并重复该过程 模块查找器已用于获取打开模块的路径,但它没有显示某些文件的路径,有些文件在缺少模块部分

有没有办法在执行或不执行脚本的情况下实现此目的 我试过pycallgraph,但是它以图像格式显示输出,它的json实现还没有完成,所以我把它排除了

请建议我解决这个问题,还有其他任何有助于实现此功能的模块

2 个答案:

答案 0 :(得分:0)

您可以使用sys.settrace()设置trace函数。原则上,您可以在代码的每一行上使用它,但它也可以帮助您检查函数调用。请查看此链接以获取示例。 http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

答案 1 :(得分:0)

我不确定您要跟踪哪种函数或您追求什么指标,但对于 Python 代码,有一个内置实用程序 -- -m trace

例如min_exmp.py

def b(z):
    if z > 0:
        return b(z-1) + 2
    else:
        return 2

def x(a):
    v = a + a + b(a)*2
    print(v)

print(x(42))

我们可以这样运行:

python3 -m trace --listfuncs min_exmp.py 

产生:

256
None

functions called:
filename: min_exmp.py, modulename: min_exmp, funcname: <module>
filename: min_exmp.py, modulename: min_exmp, funcname: b
filename: min_exmp.py, modulename: min_exmp, funcname: x

您可以在此处阅读更详细的信息:https://docs.python.org/3/library/trace.html