【问题标题】:Tracing the execution of a Python program line/statement by line programmatically以编程方式逐行跟踪 Python 程序行/语句的执行
【发布时间】:2012-08-03 05:23:46
【问题描述】:

执行 Python 脚本并为每个执行的语句将行号或行本身传递给回调函数的最简单方法是什么?例如

要执行的一段代码

for i in range(5):
    z = i**2

还有一个回调

def callback(line):
   print line

输出将是:

for i in range(5):
    z = i**2
for i in range(5):
    z = i**2
for i in range(5):
    z = i**2
...
etc

另一种表述方式是,如果我正在运行脚本并通过调试器逐步执行,我想知道接下来要执行的代码。我见过this question about tracing,但我有兴趣做不止在回调函数中跟踪执行的次数。

调试器会有所帮助,但前提是我可以在非交互模式下运行它并能够回调 python 代码

【问题讨论】:

    标签: python pdb


    【解决方案1】:

    查看sys.settrace 函数。这允许您指定为每一行代码执行的跟踪函数。我认为,它是专门为创建pdb 而实现的,因此它似乎处于您想要的正确抽象级别。实现你想要的不是微不足道的,但我认为这是最好的起点。

    对于使用它的生产程序,请查看coverage.py

    【讨论】:

      【解决方案2】:

      接受 Noufal 的回答,因为它让我走上了正确的道路,但这也有帮助

      http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

      【讨论】:

        【解决方案3】:

        愚人节模块goto 是一个用Python 实现的跟踪的工作示例,因此尽管它无疑比coverage.py 中的C 实现要慢,但它很容易理解。 http://entrian.com/goto/

        【讨论】:

        • 那......有点可怕,但很有趣:)
        • @dfb 确实如此。它还显示了如何将执行头更改为另一行。基于该代码,我实现了绝对和相对 JMP 指令。很有趣。
        猜你喜欢
        • 2017-04-25
        • 2019-11-26
        • 2018-09-17
        • 2020-12-14
        • 1970-01-01
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        相关资源
        最近更新 更多