2012-01-29 16 views
6

Actualmente estoy usando el IDE NetBeans 2.5.1 con Jython¿El depurador de Python entra en los generadores?

Al depurar mi proyecto paso a paso, tan pronto como se encuentre una iteración sobre un generador, el depurador va directamente a la final del código. La salida funciona bien, pero es imposible hacer una depuración paso a paso una vez que se alcanza el primer generador.

¿Es este un comportamiento estándar para la depuración de Python en todos los IDE de Python? ¿No es posible depurar el código "yield after yield" de la misma manera que podemos depurar VBA para cada elemento de un ciclo "for" (perdón por la mención de VBA :)?

Gracias.

EDITAR

Sin el generador de

Código:

def example(n): 
i = 1 
while i <= n: 
    yield i 
    i += 1 

print "hello" 

print "goodbye" 

Salida:

hello 
goodbye 

Depuración:

[LOG]PythonDebugger : overall Starting 
[LOG]PythonDebugger.taskStarted : I am Starting a new Debugging Session ... 
[LOG]This window is an interactive debugging context aware Python Shell 
[LOG]where you can enter python console commands while debugging 

(...) 

>>>[stdout:]hello 
>>>[stdout:]goodbye 
Debug session normal end 

con el generador

Código:

def example(n): 
    i = 1 
    while i <= n: 
     yield i 
     i += 1 

print "hello" 

for n in example(3): 
    print n 

print "goodbye" 

Salida:

hello 
1 
2 
3 
goodbye 

Depuración:

[LOG]PythonDebugger : overall Starting 
[LOG]PythonDebugger.taskStarted : I am Starting a new Debugging Session ... 
[LOG]This window is an interactive debugging context aware Python Shell 
[LOG]where you can enter python console commands while debugging 

(...) 

>>>[stdout:]hello 
>>>None['GeneratorExit 
deamon ended 
'] 

Debug session normal end 
+0

Publica tu código. Esto aclarará tu pregunta. – Blender

Respuesta

1

Acabo de probar Eclipse y hará la depuración con pydev instalado.

+0

Gracias. Simplemente lo instalé y se comporta como se esperaba. – StackyAndHutch

+0

no funciona para mí con pydev. – laike9m

2

No uso NetBeans, pero pdb al menos pasa por los generadores. Por ejemplo:

$ cat test.py 
def the_generator(): 
    for i in xrange(10): 
     yield i 

for x in the_generator(): 
    print x 

$ python -mpdb test.py 
> test.py(1)<module>() 
-> def the_generator(): 
(Pdb) n 
> test.py(5)<module>() 
-> for x in the_generator(): 
(Pdb) s 
--Call-- 
> test.py(1)the_generator() 
-> def the_generator(): 
(Pdb) n 
> test.py(2)the_generator() 
-> for i in xrange(10): 
(Pdb) n 
> test.py(3)the_generator() 
-> yield i 
(Pdb) n 
--Return-- 
> test.py(3)the_generator()->0 
-> yield i 
(Pdb) n 
> test.py(6)<module>() 
-> print x 
(Pdb) n 
0 

Si publica un código, podemos tratar de averiguar exactamente qué está pasando en su caso.

+0

Gracias por indicarme PDB. Poderoso de hecho. Pero estaba buscando un depurador gráfico integrado al IDE (a diferencia de WinPDB). – StackyAndHutch

Cuestiones relacionadas