¿Cómo me salto un bucle con pdb?

3 minutos de lectura

avatar de usuario
Rhys

¿Cómo puedo saltarme un bucle usando pdb.set_trace()?

Por ejemplo,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdb indicaciones antes del bucle. Ingresé un comando. Se devuelven todos los valores 1-5 y luego me gustaría que me pregunten con pdb de nuevo ante el print('Done!') ejecuta

avatar de usuario
triturado

Prueba el until declaración.

Ir a la última línea del bucle (con next o n) y luego usar until o unt. Esto lo llevará a la siguiente línea, justo después del bucle.

http://www.doughellmann.com/PyMOTW/pdb/ tiene una buena explicacion

  • Del artículo: vaya a la última línea del ciclo for usando ny luego escriba until. Esto irá hasta que al menos se exceda esa línea actual.

    – sachinruk

    2 de noviembre de 2018 a las 5:48

  • También funciona con listas de comprensión. No tienes que preocuparte por la última línea.

    – Shiva

    23 de noviembre de 2018 a las 10:24

  • ¿Qué harías, si ir a la última línea del bucle es engorroso? ¿Realmente no hay equivalente a f utilizado por R debug función que “finaliza la ejecución del ciclo o función actual” (adv-r.hadley.nz/debugging.html)?

    – Preguntado

    17 de junio de 2019 a las 12:51

  • Usando until (o su forma abreviada unt) sin argumentos siempre bajará una línea (a menos que presione una declaración de retorno), por lo que también puede usarlo varias veces en lugar de n.

    – Boris Verjovskiy

    22 de noviembre de 2019 a las 21:39


  • no funciona con breakpoint() establecer en el bucle en python 3. los VB Editor puede aceptar puntos de interrupción ‘sobre la marcha’, pero lo más probable es que no sea el caso con pdb.

    – Timo

    23 de septiembre de 2020 a las 5:53


Debe establecer un punto de interrupción después del bucle (“romper main.py:4” suponiendo que las líneas anteriores estén en un archivo llamado main.py) y luego continuar (“c”).

En el enlace mencionado por la respuesta aceptada (https://pymotw.com/3/pdb/), encontré esta sección algo más útil:

Para permitir que la ejecución se ejecute hasta una línea específica, pase el número de línea al comando hasta.

Aquí hay un ejemplo de cómo puede funcionar eso re: bucles:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Le ahorra dos cosas: tener que crear puntos de interrupción adicionales y tener que navegar hasta el final de un ciclo (especialmente cuando ya haya iterado de tal manera que no podría hacerlo sin volver a ejecutar el depurador).

Aquí están los documentos de Python en until. Por cierto, estoy usando pdb++ como complemento para el depurador estándar (de ahí el formato) pero until funciona igual en ambos.

Puede establecer otro punto de interrupción después del ciclo y saltar a él (al depurar) con c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

avatar de usuario
j_juggernaut

Si entendí bien esto.

Una posible forma de hacerlo sería:

una vez que te consigas pdb inmediato . Solo pega n (siguiente) 10 veces para salir del bucle.

Sin embargo, no conozco una forma de salir de un bucle en pdb.

podrías usar r para salir de una función sin embargo.

  • ¿Y si el ciclo es 10000000? Tu respuesta es muy obvia.

    – hecvd

    13 de julio de 2016 a las 17:03

  • ¿Y si el ciclo es 10000000? Tu respuesta es muy obvia.

    – hecvd

    13 de julio de 2016 a las 17:03

¿Ha sido útil esta solución?