DMarlon Studio

Capítulo 4

Depurar

Puntos de parada, paso a paso, variables, evaluar, excepciones, historial, rendimiento y pruebas.

Puntos de parada y depurar

El depurador ejecuta su proyecto (de escritorio o web) y lo detiene en las líneas que usted elija de su código: el código que genera el diseño no se depura. No hay que instalar nada: usa la biblioteca estándar de Python.

  1. En la pestaña Código, haga clic a la izquierda de un número de línea para poner un punto de parada (un punto rojo); otro clic lo quita. F5 lo pone en la línea del cursor.
  2. Con clic derecho sobre el punto se le pone una condición (por ejemplo qty == 4): solo se detiene cuando es verdadera. Se ve con un punto blanco dentro.
  3. Pulse Depurar (el bicho naranja, Mayús+F9). El programa arranca y, al llegar a un punto, se detiene: la flecha amarilla marca la línea y el panel inferior abre Variables.
El depurador detenido en un punto de parada
Detenido en la línea 4 cuando qty vale 4: las variables locales y globales, con las listas y los objetos desplegables.

Paso a paso

BotónAtajoQué hace
ContinuarF9Sigue hasta el siguiente punto de parada
EntrarF7Ejecuta la línea y entra en las funciones de su código que llame
Pasar por encimaF8Ejecuta la línea entera, sin entrar en las funciones
Salir de la funciónMayús+F8Sigue hasta volver a quien llamó a esta función
Ejecutar hasta el cursorF4Sigue hasta la línea donde está el cursor
PausarDetiene el programa en la próxima línea de su código que se ejecute
DetenerCtrl+F2Termina el programa

Mientras está detenido, la ventana (o la página web) no responde: es normal. Al continuar sigue donde estaba.

Variables, pila y evaluar

  • Variables: las locales y las globales del marco elegido. Las listas, los diccionarios y los objetos (como self) se despliegan para ver su estado.
  • Pila: la cadena de llamadas hasta la línea actual. Un clic en un marco lo elige: cambian las variables y el editor salta a su línea. Si se detuvo por un error, debajo está la traza completa.
  • Evaluar: escriba una expresión de Python (self.total, len(items)) y pulse Intro. También admite asignaciones (n = 5) para cambiar un valor antes de seguir.
  • Puntos de parada: todos los puntos con su línea y su condición; desde aquí se editan, se quitan, y se elige cuándo detenerse en las excepciones: nunca, en las no controladas (por defecto: un error en un evento detiene en su línea) o en todas, también las que su código controla con try.
La pila de llamadas
La pila: total, llamada desde la línea 9 del módulo.

Historial, llamadas, rendimiento y objetos

  • Historial: las últimas líneas de su código que se ejecutaron, con la hora y la función. Un clic lleva a la línea.
  • Llamadas: cada llamada a una función de su código y su vuelta, sangradas por profundidad y con lo que tardó: el flujo del programa.
  • Rendimiento: por cada función, cuántas veces se llamó y su tiempo total, medio y máximo (sin contar las pausas del depurador), y las líneas que más se ejecutan. Se actualiza solo; Reiniciar pone los contadores a cero.
  • Objetos: cuántos objetos vivos hay de cada clase de su programa (y componentes de tkinter): sirve para ver si algo se crea de más.

Pruebas

La pestaña Pruebas ejecuta las pruebas de unittest de la carpeta tests del proyecto (archivos test_*.py). Crear una prueba de ejemplo añade tests/test_form1.py: las pruebas importan su programa con from dms_app import Form1 (en una web, from dms_app import app y su cliente de pruebas).

import unittest

from dms_app import Form1


class TestForm1(unittest.TestCase):
    def setUp(self):
        self.form = Form1()
        self.form.root.withdraw()

    def tearDown(self):
        self.form.root.destroy()

    def test_title(self):
        self.assertTrue(self.form.root.title())

Ejecutar pruebas muestra cada prueba en verde, en rojo (con su error al pulsarla) u omitida. Depurar pruebas las ejecuta con el depurador: se detienen en los puntos de parada de su código.