¿Cómo recorrer paso a paso el código de Python para ayudar a depurar problemas?

7 minutos de lectura

¿Como recorrer paso a paso el codigo de Python para
hombre en blanco

En Java/C#, puede recorrer fácilmente el código para rastrear lo que podría estar fallando, y los IDE hacen que este proceso sea muy fácil de usar.

¿Puedes rastrear a través del código python de manera similar?

¡Sí! Hay un depurador de Python llamado pdb solo por hacer eso!

Puede iniciar un programa de Python a través de pdb mediante el uso pdb myscript.py o python -m pdb myscript.py.

Hay algunos comandos que puede emitir, que están documentados en el pdb página.

Algunos útiles para recordar son:

  • b: establecer un punto de interrupción
  • c: continúe con la depuración hasta que llegue a un punto de interrupción
  • s: recorrer el código
  • n: para ir a la siguiente línea de código
  • l: muestra el código fuente del archivo actual (predeterminado: 11 líneas, incluida la línea que se está ejecutando)
  • u: navegar hacia arriba en un marco de pila
  • d: navegar por un marco de pila
  • p: para imprimir el valor de una expresión en el contexto actual

Si no desea utilizar un depurador de línea de comandos, algunos IDE como pydev, IDE de ala o PyCharm tener un depurador GUI. Wing y PyCharm son productos comerciales, pero Wing tiene una edición “Personal” gratuita y PyCharm tiene una edición comunitaria gratuita.

  • Wow, no puedo creer que esté teniendo dificultades para encontrar un pdb gráfico para linux/ubuntu. ¿Me estoy perdiendo de algo? Puede que tenga que pensar en hacer un SublimeText Plugin para ello.

    – ThorSummoner

    6 de abril de 2014 a las 9:52

  • PyCharm es bastante bueno como depurador gráfico, ¡y su Community Edition es gratis!

    – Pedro

    4 de febrero de 2017 a las 15:45

  • @ThorSummoner, pudb es genial para eso también pydev

    – alfa_989

    11/06/2018 a las 19:45

  • pdb no es una herramienta de línea de comandos. Para usarlo, usa python -m pdb your_script.py.

    – jdhao

    5 de noviembre de 2018 a las 6:08

  • @jdhao Supongo que no es estándar, pero en Ubuntu el pdb El comando es parte del python paquete. En todo caso, python -m <module> se está convirtiendo en el estándar para otras cosas también como pippor lo que probablemente sea mejor usarlo de forma predeterminada.

    – wjandrea

    7 de julio de 2020 a las 2:47


1646756409 531 ¿Como recorrer paso a paso el codigo de Python para
akD

Usando el depurador interactivo de Python ‘pdb’

El primer paso es hacer que el intérprete de Python entre en el modo de depuración.

A. Desde la línea de comandos

La forma más directa, desde la línea de comandos, del intérprete de python

$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)

B. Dentro del Intérprete

Al desarrollar versiones tempranas de módulos y experimentarlo de manera más iterativa.

$ python
Python 2.7 (r27:82508, Jul  3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)

C. Desde dentro de su programa

Para un proyecto grande y un módulo de larga duración, puede iniciar la depuración desde dentro del programa usando
importar pdb y establecer_traza()
Me gusta esto :

#!/usr/bin/env python
# encoding: utf-8
#

import pdb

class MyObj(object):
    count = 5
    def __init__(self):
        self.count= 9

    def go(self):
        for i in range(self.count):
            pdb.set_trace()
            print i
        return

if __name__ == '__main__':
    MyObj(5).go()

Depuración paso a paso para entrar en más interno

  1. Ejecute la siguiente instrucción… con “norte” (próximo)

  2. Repitiendo el último comando de depuración… con INGRESAR

  3. Dejarlo todo… con “q” (dejar)

  4. Imprimiendo el valor de las variables… con “p” (imprimir)

    a) Pensilvania

  5. Desactivando el aviso (Pdb)… con “C” (Seguir)

  6. Ver dónde estás… con “yo” (lista)

  7. Entrando en subrutinas… con “s” (entrar en)

  8. Continuando… pero sólo hasta el final de la subrutina actual… con “r” (regreso)

  9. Asignar un nuevo valor

    a) !b = “B”

  10. Establecer un punto de interrupción

    a) romper el número de línea

    B) romper nombre de función

    C) romper nombre de archivo: número de línea

  11. Punto de interrupción temporal

    a) romper el número de línea

  12. Punto de interrupción condicional

    a) romper número de línea, condición

Nota: **Todos estos comandos deben ejecutarse desde **pdb

Para un conocimiento más profundo, consulte: –

https://pymotw.com/2/pdb/

https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/

Hay un módulo llamado ‘pdb’ en python. En la parte superior de su secuencia de comandos de python, hace

import pdb
pdb.set_trace()

y entrará en el modo de depuración. Puede usar ‘s’ para avanzar, ‘n’ para seguir la línea siguiente de manera similar a lo que haría con el depurador ‘gdb’.

A partir de Python 3.7, puede utilizar el breakpoint() Función incorporada para ingresar al depurador:

foo()
breakpoint()  # drop into the debugger at this point
bar()

Por defecto, breakpoint() importará pdb y llama pdb.set_trace(). Sin embargo, puede controlar el comportamiento de depuración a través de sys.breakpointhook() y uso de la variable de entorno PYTHONBREAKPOINT.

Ver PEP 553 para más información.

¿Como recorrer paso a paso el codigo de Python para
Ciro Santilli Путлер Капут 六四事

ipdb (depurador de IPython)

ipdb agrega la funcionalidad de IPython a pdb, ofreciendo las siguientes ENORMES mejoras:

  • finalización de pestañas
  • mostrar más líneas de contexto
  • resaltado de sintaxis

Al igual que pdg, ipdb aún está lejos de ser perfecto y es completamente rudimentario en comparación con GDB, pero ya es una gran mejora con respecto a pdb.

El uso es análogo a pdbsimplemente instálelo con:

python3 -m pip install --user ipdb

y luego agregue a la línea desde la que desea depurar paso a paso:

__import__('ipdb').set_trace(context=21)

Es probable que desee agregar un acceso directo para eso desde su editor, por ejemplo, para compañero de vim Tengo:

snippet ipd
    __import__('ipdb').set_trace(context=21)

para que pueda escribir solo ipd<tab> y se expande hasta el punto de ruptura. Entonces quitarlo es fácil con dd ya que todo está contenido en una sola línea.

context=21 aumenta el número de líneas de contexto como se explica en: ¿Cómo puedo hacer que ipdb muestre más líneas de contexto durante la depuración?

Alternativamente, también puede depurar programas desde el principio con:

ipdb3 main.py

pero generalmente no quieres hacer eso porque:

  • tendría que pasar por todas las definiciones de funciones y clases a medida que Python lee esas líneas
  • No sé cómo configurar el tamaño del contexto allí sin piratear ipdb. Parche para permitirlo: https://github.com/gotcha/ipdb/pull/155

O alternativamente, como en raw pdb 3.2+, puede establecer algunos puntos de interrupción desde la línea de comando:

ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py

aunque -c c está roto por alguna razón: https://github.com/gotcha/ipdb/issues/156

python -m module Se ha preguntado sobre la depuración en: ¿Cómo depurar un módulo de Python que se ejecuta con python -m desde la línea de comando? y dado que Python 3.7 se puede hacer con:

python -m pdb -m my_module

Características graves que faltan tanto en pdb como en ipdb en comparación con GDB:

  • historial de comandos persistente en todas las sesiones: guardar el historial de comandos en pdb

Molestias específicas de ipdb:

  • multithreading no funciona bien si no piratea algunas configuraciones …

Probado en Ubuntu 16.04, ipdb==0.11, Python 3.5.2.

1646756411 922 ¿Como recorrer paso a paso el codigo de Python para
johnnyheineken

Allí existe breakpoint() método hoy en día, que reemplaza import pdb; pdb.set_trace().

También tiene varias características nuevascomo posibles variables de entorno.

1646756411 918 ¿Como recorrer paso a paso el codigo de Python para
neumático

Si desea utilizar un IDE, hay una buena alternativa a PyCharm: Código VS

  1. Instalar código VS
  2. Agregue la extensión de Python, si aún no existe
  3. crear un archivo mymodule.py con código Python
  4. Haga clic en un número de línea en mymodule.py para establecer un punto de interrupción
  5. Golpear F5 y seleccione Debug Python file

Se detendrá en el punto de interrupción y puede hacer su depuración habitual, como inspeccionar los valores de las variables, ya sea en la pestaña VARIABLES (generalmente a la izquierda) o haciendo clic en Debug Console (generalmente en la parte inferior al lado de su Terminal):

ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad