ipdb / set_trace()在Windows上的错误



当运行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:pythontestipdb_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:pythontestipdb_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:pythontestipdb_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:pythontestipdb_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位),任何解决这个问题的想法都是热烈欢迎的。

奇怪的输出是ANSI转义码。这就是ipdb语法高亮显示的方式。然而,CMD窗口默认情况下不支持转义码,自DOS以来一直是这样。您必须启用一个名为ANSI的特殊驱动程序。使控制代码工作的SYS。Ipdb一定是在你第二次调用set_trace()时发挥了某种魔力。

使用ipdb(和pdb据我所知)的正常方法是在您想要进入调试器的代码中仅设置一个import ipdb; ipdb.set_trace()命令。从那里,您可以设置其他断点,使用breakb命令,然后按continuec到达该断点。考虑下面这个简单的pdb会话:

➜  python  python hello.py
hello
> /Users/kermit/Dropbox/dev/skripte/python/hello.py(4)<module>()
-> print('hello 2')
(Pdb) l
  1     print('hello')
  2     import pdb; pdb.set_trace()
  3
  4  -> print('hello 2')
  5     print('hello 3')
[EOF]
(Pdb) b 5
Breakpoint 1 at /Users/kermit/Dropbox/dev/skripte/python/hello.py:5
(Pdb) c
hello 2
> /Users/kermit/Dropbox/dev/skripte/python/hello.py(5)<module>()
-> print('hello 3')
(Pdb)

相关内容

  • 没有找到相关文章

最新更新