Pregunta ¿Una forma más simple de poner puntos de ruptura de PDB en el código de Python?


Solo una pregunta de conveniencia. He estado un poco mimado con depuradores en IDEs como Visual Studio y XCode. Me parece un poco torpe tener que escribir import pdb; pdb.set_trace() para establecer un punto de interrupción (prefiero no importar pdb en la parte superior del archivo ya que podría olvidarlo y dejarlo).

¿Existe una manera más simple de establecer un punto de interrupción en el código Python, tan sencillo y discreto como lo que ves en un IDE?


73
2017-08-08 10:24


origen


Respuestas:


Puede ejecutar su programa en pdb desde la línea de comando ejecutando

python -m pdb your_script.py

Se romperá en la primera línea, luego podrá agregar un punto de interrupción donde quiera en su código usando el break comando, su sintaxis es:

b (reak) [[nombre de archivo:] lineno | función [, condición]]

Es lo suficientemente flexible como para darle la posibilidad de agregar un punto de quiebre en cualquier lugar.


91
2017-08-08 10:31



Puedes usar:

from pdb import set_trace as bp

code
code
bp()
code
code

36
2018-02-24 13:56



En vim, tengo una macro configurada para esto (en mi archivo .vimrc):

map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

así que puedo presionar \ b (cuando no está en modo Insertar) y agrega un punto de interrupción después de la línea actual, o \ B (anote el capital) y pone uno antes de la línea actual.

que parece funcionar bien La mayoría de los otros editores de programadores 'simples' (emacs, sublimetext, etc.) deberían tener formas similares fáciles de hacer esto.

Editar: De hecho tengo:

au FileType python map <silent> <leader>b oimport pdb; pdb.set_trace()<esc>
au FileType python map <silent> <leader>B Oimport pdb; pdb.set_trace()<esc>

que lo activa solo para archivos de origen python. Podría agregar fácilmente líneas similares para javascript o cualquier otro idioma que use.


29
2017-10-28 11:51



Si no desea configurar puntos de interrupción manualmente cada vez que ejecute el programa (en Python 3.2+), p. supongamos que quiere crear directamente un punto de interrupción en la línea 3 y detener la ejecución allí:

python -m pdb -c "b 3" -c c your_script.py

La siguiente información puede ayudar:

Si existe un archivo .pdbrc en el directorio de inicio del usuario o en el directorio actual, se lee y se ejecuta como si hubiera sido escrito en el indicador del depurador. Esto es particularmente útil para alias. Si ambos archivos existen, el que está en el directorio de inicio se lee primero y los alias definidos pueden ser anulados por el archivo local.

Modificado en la versión 3.2: .pdbrc ahora puede contener comandos que continúan la depuración, como continuar o siguiente. Anteriormente, estos comandos no tenían ningún efecto.

Nuevo en la versión 3.2: pdb.py ahora acepta una opción -c que ejecuta comandos como si estuvieran en un archivo .pdbrc, vea Comandos del depurador.


16
2017-11-19 15:42



Así es como usaría pdb en la línea de comandos sin implementar nada en su código fuente (la documentación y otros recursos en línea no hacen un buen trabajo explicando esto a un programador que solo ha usado depuradores visuales en el pasado):

Inicie pdb escribiendo lo siguiente en un intérprete de comandos de shell:

python -m pdb 'python_script'

Este comando inicializa pdb y el depurador pdb se romperá en la primera línea de su python_script y esperará una entrada suya:

(Pdb)

Esta es la interfaz para comunicarse con el depurador. Ahora, puedes especificar tus comandos aquí. Opuesto a usar botones o atajos de teclado en depuradores visuales, aquí usará comandos para derivar los mismos resultados.

Puede ir a la siguiente línea de su código con el comando "n" (siguiente):

(Pdb) n

Al realizar una próxima, se muestra el número de línea y el código específico en la fuente:

> python_script(line number)method name
-> current line in the source code

Puede establecer un punto de interrupción especificando un número de línea en su código fuente.

(Pdb) b 50

Aquí, el depurador está configurado para romperse en la línea 50. Si no hay otros puntos de interrupción, el punto de corte en la línea 50 será el primero y podría ser referenciado por el id de punto de interrupción que es 1 en este caso. Si agrega más puntos de ruptura, obtendrán identificadores de forma secuencial (es decir, 2, 3, etc.)

Una vez que se establece un punto de interrupción, continuará ejecutando su programa hasta que pdb llegue al punto de interrupción de la siguiente manera:

(Pdb) c

Una vez que llegue a un punto de interrupción, puede ir a la siguiente línea, con el comando n como se describió anteriormente. Si desea examinar los valores de las variables, debe ejecutar el comando de parámetros de la siguiente manera:

(Pdb) p variable_name

Si ya no necesita un punto de interrupción, puede borrarlo pasando la identificación del punto de interrupción con el comando borrar:

(Pdb) clear 1

Finalmente, cuando haya terminado con el depurador puede salir de la ejecución como lo haría con el intérprete de línea de comando de python.

(Pdb) exit()

Espero que esto ayude a cualquiera a comenzar con pdb. Aquí hay una lista de comandos que puede usar con el depurador: pdb para preguntas y respuestas


8
2017-08-16 20:06



Puede usar un IDE que admita la depuración de python, o puede consultar la excelente herramienta Winpdb. Que funciona en cualquier plataforma y proporciona instalaciones de depuración gráfica a su secuencia de comandos python.

http://winpdb.org/


4
2017-08-08 10:26



No lo he intentado todavía, pero acaban de implementarlo un nuevo punto de referencia llamado breakpoint () en Python 3.7, lo que significa que ahora puede insertar un punto de interrupción con una declaración:

breakpoint()

3
2018-03-23 00:26



Puedes usar:

  • ala ide
  • eclipse con el complemento pydev
  • pycharms

Todas las anteriores soportan la depuración de python desde dentro de un IDE.


2
2017-08-08 10:30