Aplicaciones de hilo de depuración

En este capítulo, aprenderemos a depurar aplicaciones de subprocesos. También aprenderemos la importancia de depurar.

¿Qué es la depuración?

En la programación de computadoras, la depuración es el proceso de encontrar y eliminar los errores, errores y anomalías de un programa de computadora. Este proceso comienza tan pronto como se escribe el código y continúa en etapas sucesivas a medida que el código se combina con otras unidades de programación para formar un producto de software. La depuración es parte del proceso de prueba de software y es una parte integral de todo el ciclo de vida del desarrollo de software.

Depurador de Python

El depurador de Python o el pdbes parte de la biblioteca estándar de Python. Es una buena herramienta de respaldo para rastrear errores difíciles de encontrar y nos permite corregir el código defectuoso de forma rápida y confiable. Los siguientes son las dos tareas más importantes delpdp depurador -

  • Nos permite comprobar los valores de las variables en tiempo de ejecución.
  • También podemos recorrer el código y establecer puntos de interrupción.

Podemos trabajar con pdb de las siguientes dos formas:

  • A través de la línea de comandos; esto también se llama depuración post mortem.
  • Ejecutando interactivamente pdb.

Trabajando con pdb

Para trabajar con el depurador de Python, necesitamos usar el siguiente código en la ubicación donde queremos irrumpir en el depurador:

import pdb;
pdb.set_trace()

Considere los siguientes comandos para trabajar con pdb a través de la línea de comandos.

  • h(help)
  • d(down)
  • u(up)
  • b(break)
  • cl(clear)
  • l(list))
  • n(next))
  • c(continue)
  • s(step)
  • r(return))
  • b(break)

A continuación se muestra una demostración del comando h (ayuda) del depurador de Python:

import pdb

pdb.set_trace()
--Call--
>d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__()
-> def __call__(self, result = None):
(Pdb) h

Documented commands (type help <topic>):
========================================
EOF   c         d       h        list     q       rv      undisplay
a     cl        debug   help     ll       quit    s       unt
alias clear     disable ignore   longlist r       source  until
args  commands  display interact n        restart step    up
b     condition down    j        next     return  tbreak  w
break cont      enable  jump     p        retval  u       whatis
bt    continue  exit    l        pp       run     unalias where

Miscellaneous help topics:
==========================
exec pdb

Ejemplo

Mientras trabajamos con el depurador de Python, podemos establecer el punto de interrupción en cualquier parte del script utilizando las siguientes líneas:

import pdb;
pdb.set_trace()

Después de establecer el punto de interrupción, podemos ejecutar el script normalmente. El script se ejecutará hasta cierto punto; hasta donde se ha establecido una línea. Considere el siguiente ejemplo donde ejecutaremos el script usando las líneas mencionadas anteriormente en varios lugares del script:

import pdb;
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print (final)

Cuando se ejecuta el script anterior, ejecutará el programa hasta que a = "aaa", podemos verificar esto en la siguiente salida.

Salida

--Return--
> <ipython-input-7-8a7d1b5cc854>(3)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
*** NameError: name 'b' is not defined
(Pdb) p c
*** NameError: name 'c' is not defined

Después de usar el comando 'p (imprimir)' en pdb, este script solo imprime 'aaa'. A esto le sigue un error porque hemos establecido el punto de interrupción en a = "aaa".

Del mismo modo, podemos ejecutar el script cambiando los puntos de interrupción y ver la diferencia en la salida:

import pdb
a = "aaa"
b = "bbb"
c = "ccc"
pdb.set_trace()
final = a + b + c
print (final)

Salida

--Return--
> <ipython-input-9-a59ef5caf723>(5)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: name 'final' is not defined
(Pdb) exit

En el siguiente script, establecemos el punto de interrupción en la última línea del programa:

import pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
pdb.set_trace()
print (final)

La salida es la siguiente:

--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)