debugging ipdb指令被变数遮蔽

emeijp43  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(106)

当我尝试使用ipdb调试此示例脚本时:

n = 1
next = 1
print('end')

我无法执行第3行,因为python变量掩盖了pdb命令:

$ ipdb test.py
> /tmp/test.py(1)<module>()
----> 1 n = 1
      2 next = 1
      3 print('end')

ipdb> next
> /tmp/test.py(2)<module>()
      1 n = 1
----> 2 next = 1
      3 print('end')

ipdb> next
> /tmp/test.py(3)<module>()
      1 n = 1
      2 next = 1
----> 3 print('end')

ipdb> next
1
ipdb> n
1
ipdb> !n
1
ipdb> !next
1

当两个命令(n/next)都无法识别时,我如何继续执行代码呢?(假设s/step也被变量遮蔽了)。

目前为止我尝试的是:

  • 使用ipdb 3而不是ipdb -同样的问题(在我的例子中可能是因为ipdb链接到ipdb 3:))
    ***using pdb -它工作了!**n/next命令移到下一行,而不是显示python变量。我的ipdb有什么问题?
  • !!n缓解了这个问题-它运行next的ipdb版本。如果我可以alias n !!n,然后重复使用Enter来执行它,这个问题就可以为我解决了。但是Enter只显示变量n,而不运行别名n(它应该解析为!!n

我在用

  • Linux操作系统16.10
  • Python 3.5.2的基本功能:Anaconda 4.2.0(64位)
  • 数据库(0.10.1)
  • 进程(5.1.0)
  • 紫丁香属植物(0.1.0)
  • 我没有~/.pdbrc文件

编辑

此问题已由以下人员修复:https://github.com/ipython/ipython/pull/10050

0x6upsns

0x6upsns1#

2016年12月14日更新:

最后,iPython团队决定revoke this design
问题的解决方案是使用!!语句强制执行标准行为。

> /home/v-zit/test.py(1)<module>()
----> 1 n = 1
      2 next = 11
      3 print('end')

ipdb> n
> /home/v-zit/test.py(2)<module>()
      1 n = 1
----> 2 next = 11
      3 print('end')

ipdb> n
1
ipdb> !!n
> /home/v-zit/test.py(3)<module>()
      1 n = 1
      2 next = 11
----> 3 print('end')

ipdb> next
11
ipdb> !!next
end
--Return--
None
> /home/v-zit/test.py(3)<module>()
      1 n = 1
      2 next = 11
----> 3 print('end')

ipdb>

参考编号:
https://github.com/ipython/ipython/pull/9449
https://github.com/ipython/ipython/pull/10050

nlejzf6q

nlejzf6q2#

解决方法是使用括号(variable_name)
例如,如果您有一个名为q的变量,您想将其 checkout ,如果您直接在提示符中输入q,则ipdb调试过程将中断。

>>> q

相反,您应该输入(q)来检查此变量:

>>> (q)

相关问题