ipdb命令被变量隐藏

时间:2016-10-24 17:24:16

标签: python debugging ipython pdb ipdb

当我尝试使用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 /步也被变量模糊了。)

到目前为止我尝试了什么:

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

我正在使用

  • Manjaro Linux 16.10
  • Python 3.5.2 :: Anaconda 4.2.0(64位)
  • ipdb(0.10.1)
  • ipython(5.1.0)
  • ipython-genutils(0.1.0)
  • 我没有〜/ .pdbrc文件

修改

问题由:https://github.com/ipython/ipython/pull/10050

解决

1 个答案:

答案 0 :(得分:2)

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