Python中的setTrace()

6 投票
2 回答
6988 浏览
提问于 2025-04-15 15:14

有没有办法在没有方法定义的脚本中使用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 个回答

2

我只用一行简单的代码来控制一切:

import pdb; pdb.set_trace()

把这行代码放在你想要暂停程序并开始调试的地方。然后可以使用pdb命令(n表示下一步,l表示列出代码等等)。

祝好,

H.

2

settrace() 这个功能其实主要是用来做调试器的。如果你是想用它来调试这个程序,可能用 PDB 会更合适。

根据说明,settrace() 可能无法满足你的需求。

如果你真的想逐行跟踪代码,可以看看编译器包,它可以让你访问和修改 Python 编译器生成的抽象语法树(AST)。你可以利用这个功能插入一个函数调用,用来跟踪代码的执行情况。

撰写回答