Python - 记录一下pydebugger的BUG

Python - 记录一下pydebugger的BUG

我的Python版本:

1
Python 3.9.4 (tags/v3.9.4:1f2e308, Apr  6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)] on win32

只需要下面一段代码:

1
2
3
4
5
6
def f():
a = 1
breakpoint()
print(a)

f()

运行。这时候就会进入pydebugger模式:

1
2
3
> f:\otherapps\program\git\store\store20_leetcode\solutions\other-python-pydebuggerbug.py(10)f()
-> print(a)
(Pdb)

首先介绍几个pydebugger的命令:

  • p {变量名}:打印变量。例如p a是打印变量a
  • !{变量名} = {新值}:设置变量的值为新值。例如!a = 2是设置a的值为2
  • ll:(long list)List the whole source code for the current function or frame.
  • s:(step)单步执行

好了,现在我们在终端中进行debug

  1. 首先在终端中输入p a输出变量a的值,可以得到结果:1。这很正常,a的值为1
  2. 接着在终端中输入!a = 2,将a的值修改为2
  3. 然后在终端中输入p a再次打印a的值,可以得到结果:2。可见a的值已经被修改为了2
  4. 接着在终端中输入ll打印当前函数f的源码,可以得到结果:1 def f():\n2 a = 1\n...
  5. 最后在终端中输入p a再次打印a的值,可以发现BUG出现了,我们得到了结果1a的值再次变成了1
  6. 进一步验证,在终端中输入s单步执行,执行breakpoint()函数的下一行print(a),可以得到结果:1

这说明pydebugger中的打印函数的longlist将修改的a变回了原值。

原创不易,转载请附上原文链接哦~
原文链接:https://blog.letmefly.xyz/2023/04/05/Other-Python-PydebuggerBUG


Python - 记录一下pydebugger的BUG
https://blog.letmefly.xyz/2023/04/05/Other-Python-PydebuggerBUG/
作者
Tisfy
发布于
2023年4月5日
许可协议