4
我知道我可以使用PDB跟蹤一個模塊,並且我可以通過預先使用!命令從pdb執行任意命令! (例如!"foo".upper()
)。跟蹤在PDB中發佈的任意Python命令?
是否有某種方法可以將這些功能組合起來,以便通過在當前上下文中執行的任意命令進行跟蹤?例如。像step !"foo".upper()"
這樣會讓我通過upper
方法,然後返回到早期上下文?
我知道我可以使用PDB跟蹤一個模塊,並且我可以通過預先使用!命令從pdb執行任意命令! (例如!"foo".upper()
)。跟蹤在PDB中發佈的任意Python命令?
是否有某種方法可以將這些功能組合起來,以便通過在當前上下文中執行的任意命令進行跟蹤?例如。像step !"foo".upper()"
這樣會讓我通過upper
方法,然後返回到早期上下文?
使用pdb.runcall
(Pdb) pdb.runcall(func, *args, **kwds) # e.g. pdb.runcall(myfunc, arg1, arg2)
,並通過它一步(N或S)或設置斷點到它
(Pdb) b my_module.py:123 # b ([file:]lineno | function) [, condition]
,並通過按 「C」 運行到斷點。
您不能跟蹤您在示例中使用的str.upper等內建函數。
編輯:你還問了當前上下文:
您可以評估和調試,在目前情況下,用戶定義的函數的表達式。例如:
pdb.runeval("[myfunc(x) for x in range(3)]", globals(), locals())
# or with ... some_module.globals())
參數若無當地人()中使用globals(), locals()
是重要的,因爲沒有他們的表達將在__main__
模塊上下文在當前模塊上下文中計算,或者直接,但不是在當前全局和局部上下文,因爲它通常與!expression
。
不是真的,你只能通過framestack –