2013-05-10 123 views
5

我知道有一千个关于Python调试的帖子,但是我找不到我想要的东西....一个可视化调试器。例如:Python可视化调试器

[email protected] ~ $ cat duh.py  
import pdb 
class Coordinate(object): 
    pdb.set_trace() 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
    def __repr__(self): 
     return "Coord: " + str(self.__dict__) 
def add(a, b): 
    return Coordinate(a.x + b.x, a.y + b.y) 
def sub(a, b): 
    return Coordinate(a.x - b.x, a.y - b.y) 

one = Coordinate(100,200) 
two = Coordinate(300,200) 

add(one, two) 

我想查看实际使用的值。而不是看到def __init__(self, x, y):我想看到def __init__(self, 100, 200):

> /home/one/duh.py(14)<module>() 
-> one = Coordinate(100,200) 
(Pdb) s 
--Call-- 
> /home/one/duh.py(4)__init__() 
-> def __init__(self, x, y): 
(Pdb) s 
> /home/one/duh.py(5)__init__() 
-> self.x = x 
(Pdb) s 
> /home/one/duh.py(6)__init__() 
-> self.y = y 
(Pdb) s 
--Return-- 
> /home/one/duh.py(6)__init__()->None 
-> self.y = y 

我完全不使用是对什么是翻译的内部事情,真的想看到什么是像其他脚本的内部去盲目语言调试器(如JavaScript步骤)。

+1

我相信这是[LightTable](http://www.lighttable.com/)所要做的(住在IDE中) - 不知道如何以及它的作品呢。 – 2013-05-10 00:26:55

+1

只是在我的答案中添加了一些关于Winpdb的信息。 (当我编辑答案时,我不确定它是否会通知您。)Winpdb是一款优秀的免费Python视觉调试器。我不确定为什么当我第一次回答时忘记了它;可能是因为我一直在科莫多和IDEA度过。 :-) – 2013-06-21 20:11:10

回答

2

您正在定义您的当前pdb.set_trace()调用,而不是在初始化被调用后发生。如果您移动pdb.set_trace()内初始化

import pdb 
class Coordinate(object): 
    def __init__(self, x, y): 
      pdb.set_trace() 

      self.x = x 
      self.y = y 
    def __repr__(self): 
      return "Coord: " + str(self.__dict__) 
def add(a, b): 
    return Coordinate(a.x + b.x, a.y + b.y) 
def sub(a, b): 
    return Coordinate(a.x - b.x, a.y - b.y) 

one = Coordinate(100,200) 
two = Coordinate(300,200) 

add(one, two) 

调用然后在PDB,你可以只输入print x, y和获取值:

C:\Users\randlet>python duh.py 
> c:\users\randlet\duh.py(6)__init__() 
-> self.x = x 
(Pdb) print x, y 
100 200 
(Pdb) c 
> c:\users\randlet\duh.py(6)__init__() 
-> self.x = x 
(Pdb) print x, y 
300 200 
(Pdb) n 
> c:\users\randlet\duh.py(7)__init__() 
-> self.y = y 
(Pdb) n 
--Return-- 
> c:\users\randlet\duh.py(7)__init__()->None 
-> self.y = y 
(Pdb) n 
> c:\users\randlet\duh.py(18)<module>() 
-> add(one, two) 
(Pdb) print one, two 
Coord: {'y': 200, 'x': 100} Coord: {'y': 200, 'x': 300} 
(Pdb) s 
--Call-- 
> c:\users\randlet\duh.py(10)add() 
-> def add(a, b): 
(Pdb) print a, b 
Coord: {'y': 200, 'x': 100} Coord: {'y': 200, 'x': 300} 
(Pdb) 
8

这PDB调试看起来并不像乐趣。我明白你为什么不喜欢它。

幸运的是,这里有一些可视化的Python调试器。我最常使用的两种商品是商业产品,但都非常值得。他们是Komodo IDEIntelliJ IDEA。这些是支持Python以外的其他许多语言的多语言IDE。还有一个名为PyCharm的IDEA版本的Python。

还有一个很棒的免费选项,Winpdb。它很容易使用:一旦你安装并打开它,使用File/Launch并输入你的.py文件的完整路径,然后你就可以开始调试了。

这些产品都是多平台的,但如果您在Windows上,另一个免费选项是微软的Python Tools for Visual Studio。您可以将其安装到Visual Studio 2015商业版或Visual Studio 2015的免费社区版中。

为了给您一个想法,下面是Winpdb,Komodo和IDEA代码的屏幕截图。我走进__init__功能中的每个:

enter image description here  

enter image description here  

enter image description here

,如果你不喜欢我使用的代码的字体不要担心;这只是我个人的设置。当然,在正常使用中,屏幕并不那么拥挤;我将它缩小以适合屏幕截图。

我强烈建议使用这些可视化调试器中的任何一个 - 能够通过单击按键逐步执行代码并观察变量随时变化,这是非常好的。

0

我一直在使用(自2011年1月以来)由WingWare WingIDE(我有版本4.x专业版)WingIDE。我只用它来进行调试,这对我很好 - 当然我不是高级用户。我设置了断点,一行一行,等等。

相关问题