我知道有上千篇关于用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)我希望看到实际使用的值。我希望看到的不是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单步执行)那样看看内部发生了什么。
发布于 2013-05-10 11:27:05
pdb调试看起来并不有趣。我明白你为什么不喜欢它了。
幸运的是,有一些可视化的Python调试器。我最常使用的两个都是商业产品,但它们的成本都是物有所值。它们是Komodo IDE和IntelliJ IDEA。这些是除了Python之外还支持许多其他语言的多语言IDE。IDEA还有一个只支持Python的版本,叫做PyCharm。
还有一个很好的免费选择,Winpdb。它很容易使用:一旦你安装并打开它,使用文件/启动并输入.py文件的完整路径,然后你就可以开始调试了。
这些产品都是多平台的,但如果你使用的是Windows,另一个免费选择是微软的Python Tools for Visual Studio。您可以将其安装到商业Visual Studio 2015或Visual Studio 2015的免费社区版中。
为了给你一个想法,这里是来自Winpdb,Komodo和idea的代码截图。我单步执行了每个函数中的__init__函数:



如果你不喜欢我使用的代码字体,不用担心,那只是我的个人设置。当然,在正常使用中,屏幕并不是那么狭窄;我把它做得很小,以适应屏幕截图。
我强烈推荐这些可视化调试器中的任何一个-能够通过一次击键单步执行代码并观察变量的变化,这是非常棒的。
发布于 2013-05-10 08:43:16
您当前的pdb.set_trace()调用是在定义类时发生的,而不是在调用init之后发生的。如果将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)发布于 2017-02-02 11:13:14
我一直在使用WingWare的WingIDE (自2011年1月至今)(我有4.x专业版)。我只使用它来调试,它对我很有帮助--诚然,我不是一个高级用户。我设置断点,逐行执行,等等。
https://stackoverflow.com/questions/16473278
复制相似问题