被变量遮盖的 ipdb 命令
ipdb commands obscured by variables
当我尝试使用 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 也被变量遮盖了)。
到目前为止我尝试了什么:
- 使用 ipdb3 而不是 ipdb - 同样的问题(可能是因为 ipdb 在我的例子中是 link to ipdb3 :))
- using 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 文件
编辑
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>
参考:
当我尝试使用 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 也被变量遮盖了)。
到目前为止我尝试了什么:
- 使用 ipdb3 而不是 ipdb - 同样的问题(可能是因为 ipdb 在我的例子中是 link to ipdb3 :))
- using 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 文件
编辑
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>
参考: