En Java / C # puede pasar fácilmente por el código para rastrear lo que podría estar yendo mal, y los IDE hacen que este proceso sea muy fácil de usar.
¿Puedes rastrear el código de Python de manera similar?
¡Si! ¡Hay un depurador de Python llamado pdb
solo por hacer eso!
Puede iniciar un programa Python pdb
mediante pdb myscript.py
o python -m pdb myscript.py
.
Hay algunos comandos que puede emitir, que están documentados en la pdb
página.
Algunos útiles para recordar son:
b
: establecer un punto de interrupciónc
: continúe depurando hasta llegar a un punto de interrupcións
: paso por el códigon
: para ir a la siguiente línea de códigol
: lista el código fuente del archivo actual (predeterminado: 11 líneas, incluida la línea que se está ejecutando)u
: navegar por un marco de pilad
: navegar por un marco de pilap
: para imprimir el valor de una expresión en el contexto actualSi no desea utilizar un depurador de línea de comandos, algunos IDE como Pydev , Wing IDE o PyCharm tienen un depurador de GUI. Wing y PyCharm son productos comerciales, pero Wing tiene una edición "Personal" gratuita, y PyCharm tiene una edición comunitaria gratuita.
pudb
es genial para eso. Tambiénpydev
pdb
No es una herramienta de línea de comandos. Para usarlo, usepython -m pdb your_script.py
.pdb
comando es parte delpython
paquete. En cualquier caso, también sepython -m <module>
está convirtiendo en el estándar para otras cosaspip
, por lo que probablemente sea mejor usarlo de forma predeterminada.Al usar el depurador interactivo de Python 'pdb'
El primer paso es hacer que el intérprete de Python ingrese al modo de depuración.
A. Desde la línea de comando
La forma más directa, desde la línea de comandos, del intérprete de Python
B. Dentro del intérprete
Al desarrollar versiones tempranas de módulos y experimentarlo más iterativamente.
C. Desde dentro de su programa
Para un gran proyecto y un módulo de larga ejecución, puede iniciar la depuración desde el interior del programa utilizando import pdb y set_trace () de esta manera:
Depuración paso a paso para entrar en más interna
Ejecute la siguiente declaración ... con "n" (siguiente)
Repetir el último comando de depuración ... con ENTER
Dejarlo todo ... con "q" (salir)
Imprimir el valor de las variables ... con "p" (imprimir)
a) pa
Desactivar el indicador (Pdb) ... con "c" (continuar)
Ver dónde estás ... con "l" (lista)
Entrar en subrutinas ... con "s" (entrar)
Continuando ... pero justo hasta el final de la subrutina actual ... con "r" (retorno)
Asignar un nuevo valor
a) ! b = "B"
Establecer un punto de interrupción
a) romper el número de lino
b) nombre de función de interrupción
c) romper el nombre del archivo: número de lino
Punto de interrupción temporal
a) romper el número de lino
Punto de corte condicional
a) romper el número de lino, condición
Nota: ** Todos estos comandos deben ejecutarse desde ** pdb
Para un conocimiento profundo, consulte: -
https://pymotw.com/2/pdb/
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
fuente
Hay un módulo llamado 'pdb' en python. En la parte superior de tu script de Python, lo haces
y entrará en modo de depuración. Puede usar 's' para avanzar, 'n' para seguir la siguiente línea similar a lo que haría con el depurador 'gdb'.
fuente
A partir de Python 3.7, puede usar la
breakpoint()
función incorporada para ingresar al depurador:Por defecto,
breakpoint()
importarápdb
y llamarápdb.set_trace()
. Sin embargo, puede controlar el comportamiento de depuración mediante elsys.breakpointhook()
uso de la variable de entornoPYTHONBREAKPOINT
.Ver PEP 553 para más información.
fuente
breakpoint
que estaba emocionado. Pero luego aprendí que es esencialmente un atajoimport pdb; pdb.set_trace()
y eso me entristeció. Desarrolladores de Python: concéntrese en mejorar PDB con características básicas de GDB como líneas de contexto, historial de comandos persistente y finalización automática de pestañas :-)ipdb (depurador de IPython)
ipdb agrega la funcionalidad IPython a pdb, ofreciendo las siguientes ENORMES mejoras:
Al igual que pdg, ipdb todavía está lejos de ser perfecto y completamente rudimentario en comparación con GDB, pero ya es una gran mejora con respecto a pdb.
El uso es análogo
pdb
, simplemente instálelo con:y luego agregue a la línea desde la que desea depurar:
Es probable que desee agregar un acceso directo para eso desde su editor, por ejemplo, para Vim snipmate tengo:
así que puedo escribir solo
ipd<tab>
y se expande hasta el punto de interrupción. Luego, eliminarlo es fácildd
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:
pero generalmente no quieres hacer eso porque:
O, como alternativa, como en el pdb 3.2+ en bruto, puede establecer algunos puntos de interrupción desde la línea de comandos:
aunque
-c c
está roto por alguna razón: https://github.com/gotcha/ipdb/issues/156python -m module
Se ha solicitado la depuración en: ¿Cómo depurar un módulo Python ejecutado con python -m desde la línea de comandos? y desde Python 3.7 se puede hacer con:Serias características faltantes de pdb e ipdb en comparación con GDB:
molestias específicas de ipdb:
Probado en Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
fuente
Existe un
breakpoint()
método hoy en día, que reemplazaimport pdb; pdb.set_trace()
.También tiene varias características nuevas , como posibles variables de entorno.
fuente
Si vienes de Java / C # de fondo, supongo que tu mejor opción sería usar Eclipse con Pydev . Esto le proporciona un IDE completamente funcional con depurador incorporado. Lo uso también con django.
fuente
Si desea un IDE con depurador integrado, pruebe PyScripter .
fuente
https://wiki.python.org/moin/PythonDebuggingTools
pudb es un buen reemplazo directo para pdb
fuente
Python Tutor es un depurador en línea de un solo paso destinado a principiantes. Puede poner el código en la página de edición y luego hacer clic en "Visualizar ejecución" para iniciar su ejecución.
Entre otras cosas, admite:
Sin embargo, tampoco es compatible con muchas cosas , por ejemplo:
io.StringIO
y en suio.BytesIO
lugar: demofuente
También es posible avanzar y rastrear mediante programación el código de Python (¡y es fácil!). Mire la documentación de sys.settrace () para más detalles. También aquí hay un tutorial para comenzar.
fuente
Visual Studio con PTVS podría ser una opción para usted: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
fuente
PyCharm es un IDE para Python que incluye un depurador. Mire este video de YouTube para obtener una introducción sobre el uso del depurador de PyCharm para recorrer el código.
Tutorial de PyCharm: depure el código de Python con PyCharm
Nota: Esto no pretende ser un endoso o revisión. PyCharm es un producto comercial que hay que pagar, pero la compañía proporciona una licencia gratuita a estudiantes y profesores, así como una versión comunitaria "ligera" que es gratuita y de código abierto.
fuente