【发布时间】:2015-08-16 15:03:48
【问题描述】:
在运行 python 脚本并使用 ipdb 设置断点时,我得到了一个非常奇怪的输出,就像在这个程序中一样:
import sys
import ipdb
parents, babies = (1, 1)
while babies < 100:
ipdb.set_trace()
print 'This generation has {0} babies'.format(babies)
ipdb.set_trace()
parents, babies = (babies, parents + babies)
最初运行脚本时一切正常,在第一个断点处停止并打印所有变量。但是一旦我接近第二个断点,不管我是单步执行还是继续,我都会在控制台中得到这些奇怪的字符作为输出:
C:\pythontest>python ipdb_test2.py
> c:\pythontest\ipdb_test2.py(6)<module>()
5 ipdb.set_trace()
----> 6 print 'This generation has {0} babies'.format(babies)
7 ipdb.set_trace()
ipdb> n
This generation has 1 babies
> c:\pythontest\ipdb_test2.py(7)<module>()
6 print 'This generation has {0} babies'.format(babies)
----> 7 ipdb.set_trace()
8 parents, babies = (babies, parents + babies)
ipdb> n
> ←[1;32mc:\pythontest\ipdb_test2.py←[0m(8)←[0;36m<module>←[1;34m()←[0m
←[1;32m 6 ←[1;33m ←[1;32mprint←[0m ←[1;34m'This generation has {0} b
abies'←[0m←[1;33m.←[0m←[0mformat←[0m←[1;33m(←[0m←[0mbabies←[0m←[1;33m)←[0m←[1;33
m←[0m←[0m
←[0m←[1;32m 7 ←[1;33m ←[0mipdb←[0m←[1;33m.←[0m←[0mset_trace←[0m←[1;3
3m(←[0m←[1;33m)←[0m←[1;33m←[0m←[0m
←[0m←[1;32m----> 8 ←[1;33m ←[0mparents←[0m←[1;33m,←[0m ←[0mbabies←[0m ←[1
;33m=←[0m ←[1;33m(←[0m←[0mbabies←[0m←[1;33m,←[0m ←[0mparents←[0m ←[1;33m+←[0m ←[
0mbabies←[0m←[1;33m)←[0m←[1;33m←[0m←[0m
←[0m
ipdb> n
> ←[1;32mc:\pythontest\ipdb_test2.py←[0m(4)←[0;36m<module>←[1;34m()←[0m
←[1;32m 3 ←[1;33m←[0mparents←[0m←[1;33m,←[0m ←[0mbabies←[0m ←[1;33m=←[0m ←[
1;33m(←[0m←[1;36m1←[0m←[1;33m,←[0m ←[1;36m1←[0m←[1;33m)←[0m←[1;33m←[0m←[0m
←[0m←[1;32m----> 4 ←[1;33m←[1;32mwhile←[0m ←[0mbabies←[0m ←[1;33m<←[0m ←[1;36m10
0←[0m←[1;33m:←[0m←[1;33m←[0m←[0m
←[0m←[1;32m 5 ←[1;33m ←[0mipdb←[0m←[1;33m.←[0m←[0mset_trace←[0m←[1;3
3m(←[0m←[1;33m)←[0m←[1;33m←[0m←[0m
←[0m
ipdb>
当我第二次点击 ipdb.set_trace() 命令时,它会输出这些字符,从那时起调试器就无法使用了。我在不同的控制台上尝试过,但错误似乎仍然存在。
我在 Windows 上使用 Python 2.7.8 和 Anaconda 2.1.0(64 位),热烈欢迎任何解决此问题的想法。
【问题讨论】:
-
您使用 ipdb 有什么原因吗? pdb 对我来说很好。
-
是的,但是朋友向我推荐了 ipdb,以使其更加通用。我也更喜欢 ipdb 的默认颜色而不是 pdb 的纯黑白输出,pdb 也没有任何意图。它在调用“python -m ipdb ipdb_test2.py”并交互式设置断点时确实有效。我觉得这有点麻烦