Python调试代码,使用sys.settrace

时间:2016-02-04 10:06:26

标签: python debugging pdb

是否可以在使用sys.settrace本身的代码中设置断点?例如,指令跟踪程序或扩展Pdb或Bdb的类

示例代码trace.py:

import sys

def tracefunc(frame, event, arg):
    print(event) #break here?
    return tracefunc

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print __doc__
        exit()
    else:
        file_name = sys.argv[1]

    sys.settrace(tracefunc)
    globals = {}
    locals = {}
    try:
        execfile(file_name, globals, locals)
    finally:
        sys.settrace(None)

要跟踪的简单文件:loop.py

a = 100
b = 1000
for i in range(3):
    a = a + b
    b = b + 1

运行python trace.py loop.py

的控制台输出
call
line
line
line
line
line
line
line
line
line
line
line
line
return

运行:

python -m pdb trace.py loop.py
b 4 #sets a breakpoint on line 4 ie the print(event) line
s   # step through the program line by line

pdb永远不会在第4行停止,但是控制台输出显示它是在第18行execfile之后执行的(...

0 个答案:

没有答案