Depurador de Python – Python pdb

La depuración en Python es facilitada por el módulo pdb ( depurador de python) que viene integrado en la biblioteca estándar de Python. En realidad, se define como la clase Pdb que internamente hace uso de los módulos bdb (funciones básicas de depuración) y cmd (soporte para intérpretes de comandos orientados a la línea). La principal ventaja de pdb es que se ejecuta únicamente en la línea de comandos, lo que lo hace ideal para depurar código en servidores remotos cuando no tenemos el privilegio de un depurador basado en GUI. 

pdb apoya- 

  • Establecer puntos de interrupción
  • Pasando por el código
  • Listado de código fuente
  • Visualización de seguimientos de pila

Iniciar el depurador de Python 

Hay varias formas de invocar un depurador 

  • Para comenzar a depurar dentro del programa, simplemente inserte los comandos import pdb, pdb.set_trace(). Ejecute su secuencia de comandos normalmente y la ejecución se detendrá donde hayamos introducido un punto de interrupción. Básicamente, estamos codificando un punto de interrupción en una línea debajo de donde llamamos a set_trace(). Con python 3.7 y versiones posteriores, hay una función integrada llamada breakpoint() que funciona de la misma manera. Consulte el siguiente ejemplo sobre cómo insertar la función set_trace().

Ejemplo 1: Suma de dos números

Error intencional: Asinput() devuelve una string, el programa concatena esas strings en lugar de agregar números de entrada

Python3

import pdb
  
  
def addition(a, b):
    answer = a + b
    return answer
  
  
pdb.set_trace()
x = input("Enter first number : ")
y = input("Enter second number : ")
sum = addition(x, y)
print(sum)

Producción :

establecer_traza

En el resultado de la primera línea después del paréntesis angular, tenemos la ruta del directorio de nuestro archivo, el número de línea donde se encuentra nuestro punto de interrupción y <module> . Básicamente está diciendo que tenemos un punto de interrupción en exppdb.py en la línea número 10 en el nivel del módulo. Si introduce el punto de interrupción dentro de la función, su nombre aparecerá dentro de <>. La siguiente línea muestra la línea de código donde se detiene nuestra ejecución. Esa línea aún no se ejecuta. Luego tenemos el indicador pdb . Ahora para navegar por el código podemos usar los siguientes comandos:

Dominio Función
ayuda Para mostrar todos los comandos
dónde Mostrar el seguimiento de la pila y el número de línea de la línea actual
Siguiente Ejecutar la línea actual y pasar a la siguiente línea ignorando las llamadas a funciones
paso Entrar en las funciones llamadas en la línea actual

Ahora, para verificar el tipo de variable, simplemente escriba cuál es y el nombre de la variable. En el ejemplo que se muestra a continuación, la salida del tipo de x se devuelve como <string de clase>. Por lo tanto, encasillar string a int en nuestro programa resolverá el error.

Ejemplo 2:

  • Desde la Línea de Comandos: Es la forma más fácil de usar un depurador. Solo tienes que ejecutar el siguiente comando en la terminal

python -m pdb exppdb.py (ponga su nombre de archivo en lugar de exppdb.py)

Esta declaración carga su código fuente y detiene la ejecución en la primera línea de código.

Ejemplo 3:

Python3

def addition(a, b):
    answer = a + b
    return answer
  
  
x = input("Enter first number : ")
y = input("Enter second number : ")
sum = addition(x, y)
print(sum)

Producción :

línea de comando

  • La depuración post-mortem significa ingresar al modo de depuración después de que el programa finaliza con el proceso de ejecución (ya se ha producido una falla). pdb admite la depuración post-mortem a través de las funciones pm() y post_mortem() . Estas funciones buscan un rastreo activo e inician el depurador en la línea de la pila de llamadas donde ocurrió la excepción. En el resultado del ejemplo dado, puede notar que pdb aparece cuando se encuentra una excepción en el programa.

Ejemplo 4: 

Python3

def multiply(a, b):
    answer = a * b
    return answer
  
  
x = input("Enter first number : ")
y = input("Enter second number : ")
result = multiply(x, y)
print(result)

Producción : 
 

       

Comprobación de variables en la pila

Todas las variables, incluidas las variables locales de la función que se ejecuta en el programa, así como las globales, se mantienen en la pila. Podemos usar args (o usar a ) para imprimir todos los argumentos de la función que está actualmente activa. El comando p evalúa una expresión dada como argumento e imprime el resultado.

Aquí, el ejemplo 4 de este artículo se ejecuta en modo de depuración para mostrarle cómo verificar las variables:

comprobación_de_los_valores_de_las_variables

           

Punto de interrupción de Python pdb 

Mientras trabajamos con programas grandes, a menudo queremos agregar una serie de puntos de interrupción donde sabemos que pueden ocurrir errores. Para ello solo tienes que utilizar el comando break . Cuando inserta un punto de interrupción, el depurador le asigna un número a partir de 1. Utilice la interrupción para mostrar todos los puntos de interrupción en el programa. 

Sintaxis:

romper nombre de archivo: lineno, condición

A continuación se muestra la implementación para agregar puntos de interrupción en un programa utilizado en el ejemplo 4.

Agregando_puntos de ruptura

Gestión de puntos de interrupción 

 Después de agregar puntos de interrupción con la ayuda de los números asignados a ellos, podemos administrar los puntos de interrupción utilizando el comando habilitar, deshabilitar y eliminar . disabled le dice al depurador que no se detenga cuando se alcanza ese punto de interrupción, mientras que enable activa los puntos de interrupción deshabilitados.

A continuación se muestra la implementación para administrar los puntos de interrupción utilizando el Ejemplo 4. 

Administrar puntos de interrupción

Publicación traducida automáticamente

Artículo escrito por tejalkadam18m y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *