Python Visual Debugger

Sé que hay miles de publicaciones sobre depuración en Python, pero no puedo encontrar lo que estoy buscando … un depurador visual. Por ejemplo:

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(ax + bx, ay + by) def sub(a, b): return Coordinate(ax - bx, ay - by) one = Coordinate(100,200) two = Coordinate(300,200) add(one, two) 

Quiero ver los valores que realmente están siendo utilizados. En lugar de ver def __init__(self, x, y): me gustaría ver def __init__(self, 100, 200):

 > /home/one/duh.py(14)() -> 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 

No estoy totalmente acostumbrado a ser ciego con respecto a lo que sucede dentro del intérprete y realmente me gustaría ver lo que sucede en el interior como otros depuradores de lenguaje de scripting (como los pasos de JavaScript).

Que la depuración de pdb no parece divertido. Puedo ver por qué no te gusta.

Afortunadamente, hay algunos depuradores visuales de Python por ahí. Los dos que uso más a menudo son productos comerciales, pero ambos bien valen el costo. Ellos son Komodo IDE e IntelliJ IDEA . Estos son IDE multilingües que admiten muchos otros idiomas además de Python. También hay una versión de IDEA solo para Python llamada PyCharm .

También hay una gran opción gratuita, Winpdb . Es fácil de usar: una vez que lo instale y lo abra, use File / Launch e ingrese la ruta completa de acceso a su archivo .py , y luego puede comenzar a depurar.

Todos estos productos son multiplataforma, pero si estás en Windows, otra opción gratuita es Python Tools de Microsoft para Visual Studio . Puede instalarlo en el Visual Studio 2015 comercial o en la Edición comunitaria gratuita de Visual Studio 2015.

Para darle una idea, aquí hay capturas de pantalla de su código de Winpdb, Komodo e IDEA. Entré en la función __init__ en cada uno:

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

No te preocupes si no te gusta la fuente de código que usé; Ese es mi entorno personal. Y, por supuesto, en el uso normal, la pantalla no es tan estrecha; Lo hice pequeño para caber en una captura de pantalla.

Recomiendo encarecidamente a cualquiera de estos depuradores visuales: es genial poder recorrer su código con una sola pulsación de tecla y ver cómo cambian las variables a medida que avanza.

Su llamada pdb.set_trace () actual está ocurriendo a medida que se define la clase, en lugar de después de que se llame a init . Si mueve su llamada pdb.set_trace () dentro de 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(ax + bx, ay + by) def sub(a, b): return Coordinate(ax - bx, ay - by) one = Coordinate(100,200) two = Coordinate(300,200) add(one, two) 

Luego, en pdb, solo puede escribir print x, y y obtener los valores:

 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)() -> 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) 

He estado usando (desde enero de 2011) WingIDE por WingWare (tengo la versión 4.x Pro). Solo lo uso para depurar, me ha servido bien, es cierto que no soy un usuario avanzado. Establecí puntos de interrupción, paso a paso línea a línea, etc.

El depurador visual de Python para portátiles Jupyter descrito aquí podría ser de interés.
(Descargo de responsabilidad: Soy el desarrollador líder)