gpt4 book ai didi

python - 跟踪 PDB 中发出的任意 Python 命令?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:56 24 4
gpt4 key购买 nike

我知道我可以使用 PDB 来跟踪一个模块,并且我可以通过在 pdb 前面加上一个 ! (例如 !"foo".upper())。

有没有什么方法可以结合这些功能来跟踪在当前上下文中执行的任意命令?例如。像 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__ 模块上下文中计算,或者直接在当前模块上下文中计算,如果在没有 locals() 的情况下使用,但不在当前的全局和本地上下文中使用,因为它通常与 !expression 一起使用。

关于python - 跟踪 PDB 中发出的任意 Python 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com