debugging Python Visual Debugger [已关闭]

ehxuflar  于 2023-05-29  发布在  Python
关注(0)|答案(4)|浏览(137)

**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。

我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
5年前关闭。
Improve this question
我知道有上千篇关于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单步调试)。

xv8emn3q

xv8emn3q1#

pdb调试看起来并不有趣。我知道你为什么不喜欢了。
幸运的是,有一些可视化的Python调试器。我最经常使用的两种是商业产品,但它们都很值得花费。它们是Komodo IDEIntelliJ IDEA。这些是多语言IDE,除了Python之外还支持许多其他语言。还有一个仅Python版本的IDEA,名为PyCharm
还有一个很棒的免费选项,Winpdbarchived link/SourceForge.net/Google Code Archive)或Fork of the official winpdbwinpdb-reborn · PyPI/GitHub)。它很容易用途:一旦你安装并打开它,使用File/Launch并输入.py文件的完整路径,然后你就可以开始调试了。
这些产品都是多平台的,但如果你在Windows上,另一个免费的选择是微软的Python Tools for Visual Studioarchived link/new link 2023)。您可以将其安装到商业Visual Studio 2015或Visual Studio 2015的免费社区版中。
为了给予你一个想法,这里是你的代码从Winpdb,Komodo和IDEA的屏幕截图。我在以下每一个例子中使用了__init__函数:

如果你不喜欢我使用的代码字体,请不要担心;那只是我个人的设定。当然在正常使用时屏幕也不会那么局促;我把它做得很小,以适应屏幕截图。
我强烈推荐这些可视化调试器中的任何一个--能够通过一次按键单步执行代码并在运行时观察变量的变化是非常棒的。

wgx48brx

wgx48brx2#

当前的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)

然后在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)
tyu7yeag

tyu7yeag3#

用于Jupyter Notebooks的Python Visual Debugger描述了here可能会感兴趣。
(免责声明:我是首席开发人员)

mwg9r5ms

mwg9r5ms4#

我一直在使用(自2011年1月)WingWare的WingIDE(我有4. x Pro版本)。我只用它来调试,它已经很好地为我服务了-诚然,我不是一个超级用户。我设置了断点,一行一行地步进,等等

相关问题