在Python中记录调用堆栈

时间:2015-03-25 14:00:57

标签: python-2.7 stack-trace introspection pdb

我正在调试巨大的网络应用程序,这不是我写的。这就是为什么我需要一种方法来打印某个地方的每个堆栈调用(stdout或文件)。

This讨论对我没有帮助。我正在考虑pdb但它需要交互,而我正在寻找自动化解决方案。我在我的应用程序执行开始时只有一个函数调用,并希望看到它所做的所有其他调用。

该行为应该与Unix tee 命令有些相似。 Python解释器应该执行代码,同时它应该记录来自不同模块的所有函数调用。

有什么建议吗?

编辑:

#!/usr/bin/env python
import openerp
if __name__ == "__main__":
    openerp.cli.main()

因此,从这一点开始,我想记录main()所做的所有函数调用。

1 个答案:

答案 0 :(得分:3)

如果使用python跟踪模块,则可以调试该解释器执行的每个函数或行。

可以从cli调用trace moudule而无需修改程序:

  #print each executed line:
  python -m trace --count -C . -t MypyFile.py
  #print only called functions:
  python -m trace --listfuncs MypyFile.py

使用-t跟踪每一行并使用-l调用每个函数。

更多信息:https://docs.python.org/2/library/trace.html