Python中的setTrace()

时间:2009-10-21 13:07:44

标签: python trace

有没有办法在没有方法定义的脚本中使用setTrace()函数?即。

for i in range(1, 100):
    print i

def traceit(frame, event, arg):
    if event == "line":
        lineno = frame.f_lineno
        print "line", lineno

return traceit

sys.settrace(traceit)

理想情况下,我希望在循环中执行的每个迭代/代码行上调用trace函数。我之前使用过具有方法定义的脚本,但是我不知道如何让它在这个实例中工作。

2 个答案:

答案 0 :(得分:2)

settrace()实际上只用于实现调试器。如果您使用它来调试此程序,最好使用PDB

根据文档,settrace()将无法执行您想要的操作。

如果您真的想逐行跟踪,请查看编译器包,它允许您访问和修改Python编译器生成的AST抽象语法树。您应该能够使用它来插入跟踪执行的函数的调用。

答案 1 :(得分:2)

我只使用一个简单的语法行来统治它们:

import pdb; pdb.set_trace()

将它放在想要中断执行的地方并开始调试。使用pdb命令(n代表next,l代表list等)。

干杯,

小时。