2011-06-10 21 views
47

En pdb, la instrucción next no pasa por alto las comprensiones de la lista, sino que recorre cada iteración. ¿Hay alguna forma de pasar sobre ellos para que la depuración continúe en la siguiente línea después de la comprensión de la lista?¿Cómo se salta una lista de comprensión en el depurador de Python (pdb)?

He tenido que recurrir a enumerar el código, establecer un punto de interrupción en la línea siguiente y luego continuar la ejecución al siguiente punto de interrupción. Esto es molesto y pensé que debe haber una mejor manera.

Respuesta

59

Puede usar el comando until. Salida del help until en pdb:

UNT (IL)
continuar la ejecución hasta que la línea con un número mayor que la corriente uno se alcanza o hasta que el cuadro actual vuelve

0

Abundando en la respuesta de Sven como tuve que describir until y next a un colega recientemente. No es específico para la lista de la comprensión de que es stuck con otro, pero para los bucles en general .:

El comando until es como next, excepto que continúa de forma explícita hasta que la ejecución alcanza una línea en la misma función con un número de línea más alto que el valor actual.

Lo que significa que puede pasar por encima de los bucles con until

sólo para cubrir step y next esté completo:

El step comando se utiliza para ejecutar la línea actual y luego se detiene en el siguiente punto de ejecución

Lo que significa que irá instrucción por instrucción. Observe que las instrucciones de concatenación con ; se manejarán como una instrucción.

var A=0; var B=0 #Note: that will count as one instruction 

El próxima comando es como paso, pero no entra en funciones llamadas de la instrucción que se está ejecutando. En efecto, recorre todo el camino a través de la llamada de función a la siguiente declaración en la función actual en una sola operación.

El next ayuda a saltar sobre múltiples instrucciones, en una función de múltiples definiciones de variables saltará sobre todas ellas.

Aquí es un ejemplo que demuestra el escenario:

Ejemplo: pdb_until.py

aVar = 3 
x = [i for i in range(0,30)] 
bVar = 5 

La ejecución de este PDB:

python -m pdb pdb_until.py 

Inicia la sesión interactiva:

> pdb_until.py(1)<module>() 
-> aVar = 3 
(Pdb) step    #our Input, we step 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) next    #our Input, next 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) next    #our Input, we are now stuck on line 2 
> pdb_until.py(2)<module>() 
-> x = [i for i in range(0,10)] 
(Pdb) until    #our Input, until steps over (runs list comp) 

Fuente: La Biblioteca de Python estándar por ejemplo, Doug Hellmann

Cuestiones relacionadas