Wie debugge ich effizient mit Spyder in Python?
Ich mag Python und ich wie Spyder, aber ich finde das Debuggen mit Spyder schrecklich!
- Jedes mal, wenn ich eine Pause, ich muss zwei Tasten drücken: erste
die debug-und dann die Schaltfläche weiter (es bleibt an zuerst Linie
automatisch), das ist ärgerlich. - Außerdem, anstatt der standard iPython console mit auto-Vervollständigung etc. ich habe ein mieses ipdb>> die Konsole ist einfach nur Müll.
- Das Schlimmste ist, dass diese Konsole friert sehr Häufig auch wenn ich Schreibe, Ausdrucke oder einfache Auswertung, um zu versuchen, um herauszufinden, was ist der Fehler. Das ist viel schlimmer als matlab.
- Last but not least, wenn ich eine Funktion aufzurufen, die innerhalb der
ipdb>> Konsole, und setzen Sie einen Haltepunkt, wird es nicht aufhören.
Es scheint, wie ich haben, um den Haltepunkt gibt, bevor ich anfange, die
Debuggen (Strg+F5).
Haben Sie eine Lösung oder vielleicht können Sie mir sagen, wie das Debuggen von python-Skripten und-Funktionen?
Bin ich mit frischen Installation von Anaconda auf einem Windows 8.1 64bit.
Kommentar zu dem Problem
Nicht relevant für komplexe debugging, aber ich muss oft stoppen in der Mitte der Skript für die Verwendung von bestimmten set von Variablen für die weitere Entwicklung in der Konsole. Ich in der Regel nur in
sys.exit()
vorübergehend, aber es wäre bequemer, wenn ich ein breakpoint option. InformationsquelleAutor der Frage Hanan Shteingart | 2015-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Spyder dev hier) Wir kennen das Debuggen Erfahrung in der Spyder ist weit vom ideal entfernt. Was wir bieten ist jetzt sehr ähnlich wie die standard-Python-debugger, sondern wir arbeiten, um Dinge zu verbessern, die in unsere nächste major-version zu bieten, etwas näher an das, was jeder Wissenschaftler würde erwarten, dass ein debugger (in kurzen, regelmäßigen IPython console, mit der Sie inspizieren und plot-Variablen an der aktuellen Haltepunkt).
Nun zu Ihren Punkten:
Es ist wahr. Wir denken zu verbessern, so dass, wenn der Benutzer drücken Sie die Schaltfläche "Ausführen", und es ist ein Haltepunkt in der aktuellen Datei, dann Spyder tritt im debug-Modus und das Programm ausführt, bis der erste Haltepunkt erreicht wird.
ipdb
ist das IPython debugger-Konsole. Leider, aufgrund von Einschränkungen in der IPython-Architektur, es ist sehr begrenzt (keine code-completion und keine Geschichte surfen mit Pfeilen). Darüber hinaus ist es nicht möglich, das ausführen von beliebigem Python-code inipdb
oder eine regulärepdb
Konsole. Die Befehle, die Sie ausführen können, inipdb
sind die, die Sie Lesen können, wenn die Bewertung derhelp
Befehl drin.Das ist, weil, wie ich sagte, Sie nicht einschätzen kann, beliebigen Python-code.
Die Sie benötigen, um neue Haltepunkte in unseren Editor, so dass Sie synchronisiert sich mit unserer Python/IPython-Konsolen
InformationsquelleAutor der Antwort Carlos Cordoba
Debuggen von workflow -
Müssen Sie verstehen, dass Sie sind in der Tat mit unterschiedlichen integration der Python-debugger
pdb
undipdb
(die verwendetpdb
werden kann und der Zugriff über das Modulipdb
) . Ich hoffe, dass dieses einfache Beispiel soll Ihnen helfen, sich in mit es besser.Angenommen, Sie möchten, um diesen code zu Debuggen:
Schnell erste Debuggen mit iPython %debug
Das erste was ich mache ist zu nennen, pdb von iPython mit der Magische Befehl
%debug
haben, können Sie es als Standard-Mechanismus mit%pdb
.Nachdem Sie zu Mittag Essen
pdb
. Finden Sie alle Befehl in der offiziellen docs oder verwenden Sie den Befehlh
um Sie anzuzeigen. In dieser Phase, In der nur die Befehle, die ich verwende sind:p
: druckt die Variablen, die Sie angebenpp
: pretty printsargs
: wenn Sie innerhalb einer Funktion druckt es die Argumentepp locals()
: kann nützlich sein, um alle drucken die Variablen, aber die meistendie Zeiten, es ist ein Durcheinander!
!
verwenden, wenn Sie wollen, um Konflikte zu vermeiden, mit dem Befehle aufgeführt, die inh
whatis
variable_name: entspricht Typ(variable_name)u
: Bewegen Sie den aktuellen frame eine Ebene nach oben in der stack-trace (an einem älteren Rahmen).d
: Bewegen Sie den aktuellen frame eine Ebene nach unten im stack-trace (ein neuer Rahmen).q
: wenn Sie fertig sind können Sie mit q zum verlassenIn unserem Fall:
Oder
ipdb> !a,b,c,d
(kein Leerzeichen zwischen esclamation-mark und den ersten Wert).Es ist klar, dass b-und d-strings in Fall können wir verwenden:
Tiefer gehen mit break-Punkte
70% der Zeit
%debug
Punkte, die Sie auf die Lösung. Wenn Sie brauchen mehr Funktionen, wie Haltepunkte ist Zeit Sie zu nutzen Spyder. In diesem Fall wollen wir verstehen, warumb
ist eine Zeichenfolge, die wir setzen einen breakpoint daneben. Ich finde viel besser mit der standard-Python-Konsole anstelle des IPython console zum Debuggen, so wählen Sie die Konsole vor dem Start debugging:Öffnen Sie dann die
variable explorer
, ob es irgendwelche Variablen zu löschen. Ich benutze Strg+F5 zum starten des debugging können Sie die Tasten auf der Oberseite, aber ich es vorziehen, Ihre Tastaturbefehle unten gezeigt:Nun haben wir den Fehler gefunden. Wir können auch test eine Lösung wiederholen wir den Schritt, bis 12, und wir setzen
to_s = False
Es funktioniert. Ein wichtiges Merkmal der Verwendung der pdb-standard in der Python-Konsole, ist, dass Sie auto-Wettbewerb, und Sie können verwenden Sie die variable explorer statt mit
whatis
undpp
:Mithilfe der Variablen-explorer können Sie auch ändern Sie den Wert der Variablen, die macht die Dinge noch schneller.
Bedingte Haltepunkte
Anderen, besseren Weg zu suchen, der Fehler ist die Verwendung bedingten Haltepunkt (Shift+F12) ein großer Vorteil von Spyder wird zu Debuggen und verwenden Sie die Liste von Haltepunkten. Bedingte Haltepunkte werden aktiviert, wenn die Bedingung
True
In unserem Fall, wir wollen suchen, wo b wird ein string, so ist die Bedingung:type(b) == str
. Ich in der Regel eine Menge von bedingten breakpoints und sehen, welche die Bedingung erfüllen. Dafür nicht verwenden, Shift+F12, aber die normalen breakpoints Doppel-Klick auf die nächste Zeile und gehen Sie zu "Debuggen" -> " Liste von Haltepunkten und kopieren und Vergangenheit der Zustand in der Tabelle zu jedem Haltepunkt, wie in der Abbildung unten gezeigt.Ab hier werden die Befehle zu verwenden sind:
InformationsquelleAutor der Antwort G M
Pdb-debugger funktioniert Prima mit regelmäßigen python -. Also Spyder, ich schalten Sie einfach die python-Konsole wenn ich Debuggen will interaktiv.
Schönen intro zu Debuggen mit der pdb https://pythonconquerstheuniverse.wordpress.com/category/python-debugger/
InformationsquelleAutor der Antwort LtGlahn
Hier ist, wie ich im debug-Spyder um zu vermeiden das einfrieren der IDE. Ich mache das, wenn ich ändern Sie das Skript, während in den debugging-Modus.
Immer noch ein bisschen nervig, aber es hat den zusätzlichen Vorteil, clearing (zurücksetzen) Variablen-Liste.
InformationsquelleAutor der Antwort oogieoogieful
Einem kleinere extra zu Punkt 3:
Es auch schien mir die debug-Konsole Häufig fror, dabei Drucke, bewerten, etc, aber durch drücken der stop (Exit-debug) - Taste in der Regel habe es wieder auf den Boden der call-stack und dann konnte ich nach oben gehen ('u') an den Rahmen war ich Debuggen. Einen Versuch Wert. Dies könnte für eine spätere version von Spyder (2.3.5.2)
InformationsquelleAutor der Antwort Paul
Können Sie die debug-shortcut-Tasten wie:
Schritt Über F10
Schritt In F11
in Extras>Einstellungen>Tastenkombinationen
InformationsquelleAutor der Antwort Mahyar