online debugger debug commands python ipython pdb

debugger - pdb python 3



Comportamiento extraño de IPython ipdb (1)

Si tiene dos procesos, cada uno de ellos con consumo stdin , pueden causar síntomas muy similares a los que ha descrito.

>>> import subprocess >>> subprocess.Popen(''python'', shell=True) <subprocess.Popen object at 0x0000000001DEFEB8> >>> Python 2.6.5 (r265:79096, Mar 19 2010, 18:02:59) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> >>> a = 5 >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ''a'' is not defined >>> a 5 >>> a = 6 >>> a 5 >>> a 6 >>> a 5 >>> a 6 >>> a 5 >>> a 6

La primera vez que llamé a , estaba indefinido, aunque lo había definido en la línea anterior. Lo vuelvo a llamar y es 5. Luego lo configuro en 6, y cada llamada subsiguiente se alterna entre las dos. Esto parece ser exactamente lo que estás experimentando.

stdin es un búfer de línea, lo que hace que líneas de texto alternas pasen a procesos alternos, en este caso dos instancias de Python.

Tengo un comportamiento realmente extraño que simplemente no entiendo y, por lo tanto, no puedo explicar, así que espero que alguien aquí pueda ayudarme. Lo primero que noté fue que ipdb ya no me permitía definir variables:

ipdb> what=5 ipdb> what *** NameError: name ''what'' is not defined whatelse=6

Y un poco más tarde, encontré que ipdb devolvía esto a mi entrada (después de ejecutar el código nuevamente):

dir() ipdb> [''args'', ''content_type'', ''function'', ''ipdb'', ''item_code'', ''kwargs'', ''object_id'', ''request'', ''ud_dict'', ''update_querydict'', ''what'', ''whatelse''] what=5 ipdb> what 5 ipdb> whatelse=7 ipdb> whatelse ipdb> 6 whatelse ipdb> 7 whatelse ipdb> 6 whatelse ipdb> 7

A mi me parece que tengo dos sesiones de depuración intercaladas, a las que tengo acceso en un extraño patrón alternativo. ¿Cómo puedo deshacerme de eso?

editar: Matar todos los procesos de Python y volver a ejecutar el código ayudó. Todo ha vuelto a la normalidad ahora. Pero como no entiendo lo que estaba pasando, estaría muy interesado en una respuesta a lo que sucedió y en cómo reproducir el comportamiento.