【问题标题】:How to get a full trace of a script?如何获得脚本的完整跟踪?
【发布时间】:2019-03-22 05:06:21
【问题描述】:

我需要在调用一个非常大的 python 程序时保存整个函数调用(如果可能,甚至是行)。 我尝试使用trace.Trace()count=1 并收到十几个文件,每个文件的每个执行行的计数,但没有时间。我看不到谁打电话给谁,按什么顺序。 这应该是一个程序无一例外。 任何想法如何做到这一点? * 我使用的是 Python 2.7。

【问题讨论】:

  • 如需计时信息,请参阅How can you profile a script?
  • 好吧,我尝试使用 cprofile,甚至使用 pstats.Stats().print_callers() 让所有调用者,但对我来说唯一缺少的是时间顺序。据我所知,排序选项不包括这样的选项。
  • 我没有看到任何从分析器获取这种时间信息的方法。另一种方法是使用sys.settrace 并将其连接到您自己的跟踪函数,该函数记录每次调用发生的时间。问题How do I print functions as they are called 的答案有一个定义可以用作settracetracefunc 参数的函数的示例。也可以获取包含调用的行的源代码。
  • Here's some more information 关于settrace()
  • 非常感谢您的帮助。我已经尝试过使用 settrace() ,但它对我也不起作用,因为它太慢了我的程序。我希望尽可能少地干扰执行时间。似乎没有办法做我正在寻找的......

标签: python python-2.7 trace


【解决方案1】:

写信trace.Trace(timing=True) 获取时间。在命令行上,使用-g 选项。

我通过阅读the trace documentation (Python 2 version) 找到了此信息。当您想“我该如何处理 [xyz]?”时,这应该始终是您的第一站。

【讨论】:

  • timing=True 仅适用于 trace=1,并且在每一行之后都会打印出来,使我的程序运行非常缓慢...
  • @chukkik 不确定有没有办法解决这个问题。
猜你喜欢
  • 2022-07-15
  • 2020-12-03
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多