Wenn Sie eine Zelle über pdb debuggen und sie dann nicht beenden, bevor Sie die Zelle erneut ausführen, können Sie nicht zu Ihrer IPython-Umgebung zurückkehren. Reproduzieren Sie es über Testfall für pdb hang in Jupyter notebook . Hier ist ein Screenshot:
Für die Aufzeichnungen und Suchmaschinen, um Ihr Notizbuch aufzuhängen:
def test():
import pdb; pdb.set_trace() # XXX BREAKPOINT
return 0
test()
Beachten Sie, dass Kernel/Interupt nicht hilft. Sie können das Notebook speichern, aber um Zellen erneut auszuführen, müssen Sie den Kernel neu starten. An diesem Punkt gehen "Alle Variablen verloren"
Dies passiert mir nicht selten, wenn ich den Rest des Notebooks nach Hinweisen zum Debuggen der Zelle durchsuche und dann vergesse, das Programm zu beenden, bevor ich die Zelle wechsel und erneut starte. Ja, ich kann vorsichtiger sein, aber andere haben die gleiche Erfahrung. Danke an @wmayner für einen praktischen Testfall, der unter #3400 beschrieben ist.
Ich verwende Jupyter Notebook 4.3.1 auf Python 3.4.3 (Standard, 17. November 2016, 01:08:31) [GCC 4.8.4]
Kernel-Informationen: Python 3.4.3 (Standard, 17. November 2016, 01:08:31)
Eingabe von @takluyver unter #10499
pdb läuft im gleichen Prozess, und wir wissen, wann es Eingaben erwartet. Ich denke, es braucht jemanden, der die Arbeit erledigt, damit, wenn das HTML-Eingabefeld im Frontend entfernt wird, eine Nachricht an den Kernel zurückgesendet wird, die EOFError auslöst.
Dazu ist möglicherweise ein neuer Nachrichtentyp erforderlich, oder wir können dies als Metadatenfeld in der vorhandenen stdin-Antwortnachricht tun.
Ich stoße auf das gleiche Problem.
Absolut, hier das gleiche. Dies ist ein königlicher Schmerz in den ziemlich empfindlichen Teilen meines Körpers. Wenn es eine bequeme Möglichkeit gäbe, pdb ohne die laufende Zelle zu stoppen, könnte dies gemildert werden. Alternativ wäre zumindest eine Möglichkeit, Ihre Arbeit vor dem Herunterfahren des Notebooks zu sichern, wichtig (zB trainiertes neuronales Netz und das Notebook stürzt beim Speichern nach 2000 Epochen ab).
Ich habe dieses Problem auch mit Jupyter Version 4.30, Python 3.6.2. Ein Neustart des Kernels scheint die einzige Möglichkeit zu sein, dieses Problem zu beheben.
Habe gerade eine 8-Stunden-Rechnung wegen dieser ... Zeit verloren, um wieder zu beginnen.
Ich habe gerade eine 64-Stunden-Rechnung verloren, auf der ich heute Ergebnisse präsentieren soll -.-
Niemand eine Lösung gefunden?
Wurde auch gerade davon gebissen. Wie debuggen Leute normalerweise in Jupyter Notebook? pdb zu benutzen ist wie mit einer Granate zu jonglieren :(
Bitte bitte bitte beheben Sie dies! Ich bekomme ständig dieses Problem.
Hier gilt das gleiche. Muss eine sehr lange Berechnung wiederholen
Ich auch.
bitte repariere jemand und ich zahle dir $5
@zsal Wenn Sie es ernst https://www.bountysource.com hinzufügen
Selbes Problem hier. Benötigen Sie eine Möglichkeit, einen außer Kontrolle geratenen Prozess oder einen Prozess, der auf eine Eingabe "wartet", zu unterbrechen und die Kontrolle zurückzugewinnen ... auch wenn ich nicht mehr zur Eingabeaufforderung komme.
Ich bin ein Neuling - Wie um alles in der Welt debuggen fortgeschrittene Programmierer in Notebooks? Sicherlich verwenden sie PDB nicht mit dieser "Zeitbombe" darin? Bitte teilen Sie Ihre Geheimnisse! :)
+1
+1
+1
+1
Hoch!
Dieses Problem bereitet mir seit Jahren jedes Mal, wenn ich pdb verwende und vergesse, aufzuhören, bevor ich die Zelle erneut starte.
Ich habe ein Kopfgeld auf BountySource erstellt. Vielleicht wird das endlich behoben, wenn wir genug Geld zusammenbekommen.
https://www.bountysource.com/issues/44958889-hang-after-running-pdb-in-a-cell-kernel-interrupt-doesn-t-help
+1
+1
Das hat mich seit Jahren verrückt gemacht.
Wie wäre es stattdessen mit IPython.core.debugger.Pdb
?
from IPython.core.debugger import Pdb; Pdb().set_trace()
(Oder %debug
Magie kann zum Debuggen verwendet werden.)
Das zweimalige Ausführen von Pdb().set_trace()
hat das gleiche Problem.
Ich untersuche das. Die grundlegende Funktionsweise von Interrupts besteht darin, dass sie (unter Unix) ein Signal an den Prozess senden, der dann KeyboardInterrupt auslöst.
Es scheint mehrere Probleme damit zu geben:
pdb
eine ganze Reihe von KeyboardInterrupt-Fangcode hat, der verhindert, dass er durchsickert. Dies kann vielleicht in IPython.core.debugger.Pdb
behoben werden.@minrk ist richtig und ich lag falsch, sorry.
Um diesen Fix zu erhalten, muss Folgendes passieren:
Vielen Dank, dass Sie sich das angeschaut haben!!
Sobald es ein neues IPykernel-Release gibt, kann dieses als behoben geschlossen werden.
Fertig! Dies kann geschlossen werden.
import IPython
import ipykernel
print(IPython.__version__)
print(ipykernel.__version__)
IPython.core.debugger.set_trace()
7.15.0
5.3.0
``` 250 sys.stdout.flush()
251
--> 252 def __call__(self, result=None):
253 """Drucken mit History-Cache-Verwaltung.
254
--KeyboardInterrupt--
--KeyboardInterrupt--
```
KeyboardInterrupt scheint in meinem Fall nichts zu tun. Ist das das erwartete Verhalten?
Ich würde erwarten, dass das unterbricht. Ich werde sehen, ob ich reproduzieren kann. Das ist Windows, ja?
macOS 10.15.5
Python 3.6.2 (default, May 4 2018, 19:40:30)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)] on darwin
Oh, das ist also nicht zu erwarten. Lassen Sie es mich wissen, wenn ich Informationen zur Klärung hinzufügen kann.
Pip-Liste
```Paketversion
Appnope 0.1.0
attrs 19.3.0
Rückruf 0.2.0
Bleichmittel 3.1.5
Dekorateur 4.4.2
defusedxml 0.6.0
Einstiegspunkte 0.3
ipykernel 5.3.0
ipython 7.15.0
ipython-genutils 0.2.0
ipywidgets 7.5.1
jedi 0.17.1
Jinja2 2.11.2
jsonschema 3.2.0
Jupyter 1.0.0
Jupyter-Client 6.1.3
Jupyter-Konsole 6.1.0
Jupyter-Kern 4.6.3
MarkupSafe 1.1.1
Verstimmung 0.8.4
nbconvert 5.6.1
nbformat 5.0.7
Notebook 6.0.3
Verpackung 20,4
pandocfilter 1.4.2
Parso 0.7.0
erwartet 4.8.0
Pickleshare 0.7.5
Pip 20.0.2
prometheus-client 0.8.0
Prompt-Toolkit 3.0.5
ptyprocess 0.6.0
Pygmente 2.6.1
pyparsing 2.4.7
hartnäckig 0.16.0
python-dateutil 2.8.1
pyzmq 19.0.1
qtconsole 4.7.5
QtPy 1.9.0
Send2Trash 1.5.0
Setuptools 46.0.0
sechs 1.15.0
terminado 0.8.3
Testpfad 0.4.4
Tornado 6.0.4
Eigenschaften 4.3.3
WC-Breite 0.2.5
Webencodings 0.5.1
Rad 0.34.2
Widgetsnbeextension 3.5.1```
Bei mir trat das Problem auch nach dem Update auf. Siehe auch auf den Remote-Linux-Rechenknoten, die ich für die Arbeit verwende:
import IPython
import ipykernel
import os
import platform
print(IPython.__version__)
print(ipykernel.__version__)
print(os.name,platform.system(),platform.release())
IPython.core.debugger.set_trace()
7.15.0
5.3.0
posix Linux 4.19.94-300.el7.x86_64
Arbeiten Sie derzeit in einer ziemlich sperrigen Umgebung, können Sie also nicht ausschließen, dass einige Abhängigkeiten dies verursachen? Ich kann versuchen zu sehen, ob sich der Fehler auch in einer minimalen Umgebung reproduziert, wenn das nützlich wäre?
Dies erfordert einen noch nicht veröffentlichten Master von IPykernel.
Hilfreichster Kommentar
Wurde auch gerade davon gebissen. Wie debuggen Leute normalerweise in Jupyter Notebook? pdb zu benutzen ist wie mit einer Granate zu jonglieren :(