我知道在Python中有一千个关于调试的帖子,但我找不到我要找的东西....一个可视调试器.例如:
one@localhost ~ $ 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)
Run Code Online (Sandbox Code Playgroud)
我想看看实际使用的值.而不是看到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
Run Code Online (Sandbox Code Playgroud)
我完全不习惯对解释器内部的内容视而不见,并且真的希望看到内部发生的事情,就像其他脚本语言调试器(如JavaScript步骤)一样.
pdb调试看起来不太有趣.我明白你为什么不喜欢它.
幸运的是,有一些视觉的Python调试器在那里.我最常用的两个是商业产品,但它们都非常值得付出代价.它们是Komodo IDE和IntelliJ IDEA.这些是多语言IDE,除了Python之外还支持许多其他语言.还有一个名为PyCharm的仅限Python的IDEA版本.
还有一个很棒的免费选项,Winpdb.它易于使用:一旦安装并打开它,使用File/Launch并输入文件的完整路径.py,然后就可以开始调试了.
这些产品都是多平台的,但如果你在Windows上,另一个免费选项是微软的Visual Studio Python工具.您可以将其安装到商业Visual Studio 2015或Visual Studio 2015的免费社区版中.
为了给你一个想法,这里是你的代码从Winpdb,Komodo和IDEA的截图.我进入了__init__每个功能:

如果您不喜欢我使用的代码字体,请不要担心; 这只是我个人的设定.当然,在正常使用中,屏幕不是那么狭窄; 我把它做得很小,以适应截图.
我强烈推荐任何这些可视调试器 - 能够通过一次按键逐步执行代码并观察变量随时变化是很棒的.
您当前的 pdb.set_trace() 调用是在定义类时发生的,而不是在调用init之后发生的。如果将 pdb.set_trace() 调用移至init内
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)
Run Code Online (Sandbox Code Playgroud)
然后在 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5573 次 |
| 最近记录: |