Solo una pregunta de conveniencia. Me han echado a perder un poco los depuradores en IDE 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 forma más sencilla de establecer un punto de interrupción en el código Python, tan sencilla y discreta como lo que ve en un IDE?
python -m pdb <your_script>.py
entoncesb <line_number>
para establecer el punto de interrupción en el número de línea elegido (sin paréntesis de función). Presionec
para continuar hasta su punto de ruptura. Puede ver todos sus puntos de interrupción usando elb
comando solo. Escribahelp
para ver otros comandos pdb disponibles durante la depuración.breakpoint()
función incorporada . python.org/dev/peps/pep-0553Respuestas:
Puede ejecutar su programa
pdb
desde la línea de comandos ejecutandoSe 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:Es lo suficientemente flexible como para darle la capacidad de agregar un punto de interrupción en cualquier lugar.
fuente
pdb.set_trace()
voy al depurador, uso ell
comando (lista) y veo que quiero establecer un punto de interrupción en la línea 27, luego ingresaría:b 27
y el depurador establecería un punto de interrupción en la línea 27 (encontré la documentación es un poco difícil de entender, así que quería agregar ese punto de aclaración).x
y desea detenerse cuandof
se llama a su método , puede decirbreak x.f
, y luegoc(ontinue)
. Esto funciona incluso si el objeto está en un archivo inaccesible o fue creado dinámicamente, por ejemplo, al despegar.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Puedes usar:
fuente
set_trace
solo cuando uso bp ()?En vim, tengo una macro configurada para esto (en mi archivo .vimrc):
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 (tenga en cuenta la capital) y coloca 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 fáciles similares de hacer esto.
Editar: de hecho tengo:
que lo enciende solo para archivos fuente de Python. Puede agregar fácilmente líneas similares para javascript o cualquier otro idioma que use.
Actualización de 2019 (Python 3.7+)
Python 3.7+ ahora tiene incorporado
breakpoint()
que puede reemplazar al anteriorimport pdb; pdb.set_trace()
en vim. Todavía funciona igual.fuente
set autoindent
en su archivo .vimrc .set autoindent
(y un montón de otras opciones) como estándar. Una de las primeras cosas que hago con un nuevo sistema es incorporar un mejor vimrc ..."dyy
y siempre que lo necesite simplemente haga"dp
o"dP
. ¡Aprenda los registros vim ! ¡Son muy útiles y siempre están respaldados!qd
y luego"dp
pegue. Finalmente, asigne sus instrucciones a un registro para que siempre se llenen en la carga de vim. Ejemplo:let @d = 'oimport pdb; pdb.set_trace()k0:w'
ahora, utilícelo@d
siempre que desee pegar la línea en un archivo. Lo anterior también guarda el archivo. Pero tendrá que grabar el suyo (en lugar de copiar / pegar arriba) ya que se trata de caracteres especiales (para escapar, etc.).Si no desea establecer puntos de interrupción manualmente cada vez que ejecuta el programa (en Python 3.2+), por ejemplo, diga que desea 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:
fuente
Todavía no lo he probado, pero acaban de implementar un nuevo punto de interrupción () integrado en Python 3.7, lo que significa que ahora puede insertar un punto de interrupción con una declaración:
fuente
Así es como usaría pdb en la línea de comando sin implementar nada en su código fuente (la documentación y otros recursos en línea no hacen un buen trabajo al explicar esto a un programador que solo ha usado depuradores visuales en el pasado):
Inicie pdb escribiendo lo siguiente en un indicador de shell:
Este comando inicializa pdb y el depurador de pdb se interrumpirá en la primera línea de su python_script y esperará una entrada suya:
Esta es la interfaz para comunicarse con el depurador. Ahora, puede especificar sus comandos aquí. A diferencia de usar botones o atajos de teclado en depuradores visuales, aquí usará comandos para obtener los mismos resultados.
Puede ir a la siguiente línea de su código con el comando "n" (siguiente):
Realizar un siguiente mostraría el número de línea y el código específico en la fuente:
Puede establecer un punto de interrupción especificando un número de línea en su código fuente.
Aquí, el depurador está configurado para romperse en la línea 50. Si no hay otros puntos de interrupción, el punto de interrupción en la línea 50 será el primero y podría ser referenciado por la identificación del punto de interrupción, que es 1 en este caso. Si agrega más puntos de interrupción, obtendrán identificadores secuencialmente (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:
Una vez que llegue a un punto de interrupción, puede pasar a la siguiente línea, con el comando n como se describió anteriormente. Si desea examinar los valores de las variables, ejecute el comando de parámetro de la siguiente manera:
Si ya no necesita un punto de interrupción, puede borrarlo pasando el id del punto de interrupción con el comando clear:
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 comandos de Python.
Espero que esto ayude a cualquiera a comenzar con pdb. Aquí hay una lista de comandos que puede usar con el depurador: pdb así que preguntas y respuestas
fuente
Python
3.7
tiene una nueva forma incorporada de establecer puntos de interrupción. VocaciónMás aquí https://stackoverflow.com/a/53263117/6488361
fuente
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 facilidades de depuración gráfica para su script de Python.
http://winpdb.org/
fuente
Puedes usar:
Todo lo anterior admite la depuración de Python desde dentro de un IDE.
fuente
En Atom, si los complementos de Python están instalados, puede escribir '
pdb
' y presionar enter y el fragmento escribirá import y rastreará por usted.Me he acostumbrado a esto ahora que a veces simplemente lo escribo incluso si lo estoy editando en vim y esperando que aparezca el menú desplegable.
fuente
Un método subestimado es establecer un punto de interrupción en pdb directamente:
establecerá un punto de interrupción en
site-packages\torch\__init__.py:10
Luego
pdb> c
se detendrá en este punto de ruptura.Los siguientes también son válidos:
Consulte el documento para obtener más detalles.
fuente
Puede usar Vim con el complemento Python-Mode o Emacs con Elpy complemento .
Estos complementos le brindan puntos de interrupción con pulsaciones de teclas fáciles (
\ b
en Vim yC-c C-u b
en Emacs) además de muchas otras características de IDE de gran peso (plegado de código, refactorización, linting, etc.), todo dentro de un editor de texto ligero basado en terminal.fuente
La forma más sencilla de ejecutar el depurador en su secuencia de comandos es simplemente
Ejecutar pdb en una línea de comandos de Linux da
fuente
pdb
? O de donde