Festlegen von Haltepunkten mit der Option nosetests --pdb


88

nosetests --pdbLassen Sie mich bei Fehlern oder Misserfolgen anhalten, aber dies ist zu spät für meine Bedürfnisse. Das Durchlaufen des Codes während der Ausführung hilft mir beim Debuggen, wo das Problem liegt.

Nosetests sind jedoch hilfreich, da sie Tests ermöglichen, die auf relativen Importen beruhen (dh Tests in einem Paket).

Wie kann ich Haltepunkte setzen, bevor die Tests ausgeführt werden? Zur Zeit benutze ich:

python -m pdb /path/to/my/nosetests testfile.py

Diese Lösung ist nicht ausreichend. Nosetests stören die PDF-Ausgabe und meine Tastatursteuerelemente (z. B. Pfeiltasten) sind defekt.

Import pdb verwenden; pdb.set_trace () scheint eine gute Idee zu sein, jedoch blockiert nosetests meinen Zugriff auf die pdb-Konsole.

Antworten:


118

Du kannst hinzufügen

import pdb; pdb.set_trace() 

überall in Ihrer Quelle, wo Sie im Debugger anhalten möchten.

Stellen Sie sicher, dass Sie -szur Nase übergehen , damit diese nicht erfasst wird stdout.


Ich wollte dies gerade zu meiner Frage hinzufügen. Dies ist auch keine akzeptable Lösung. Wenn Sie dies mit Nosetests verwenden, ist dies offensichtlich buchstäblich unbrauchbar, da der Zugriff auf die PDF-Konsole überprüft wird und keine PDF-Befehle ausgeführt werden können.
Devin

25
Fügen Sie den Nosetests das Flag -s hinzu, um zu verhindern, dass stdout erfasst wird, und Sie können pdb problemlos verwenden.
Ned Batchelder

1
Funktioniert nicht. Verwenden Sie diese:from nose.tools import set_trace; set_trace()
Anilbey

142

Noch besser als daran zu denken, die mit Nose gelieferte Variante -szu verwenden set_trace. Hinzufügen

from nose.tools import set_trace; set_trace()

wo immer Sie in den Debugger einbrechen möchten. Die stdin / out-Weiterleitung wird für Sie erledigt. Der einzige seltsame Nebeneffekt, auf den ich gestoßen bin, ist die Unfähigkeit, Ihren Code innerhalb von pdb (using run) neu zu starten, während Sie während eines Nasenlaufs debuggen.


Gibt es eine Dokumentation dazu? Wie bewege ich mich aus der Schleife heraus?
AJ

Du meinst, wie man navigiert, wenn man pdbläuft? Ich bin mir sicher, dass es Dokumente gibt, aber von oben nach unten - s"tritt in einen Funktionsaufruf ein", ngeht zur "nächsten" Anweisung, ubewegt den Stapel "nach oben" und dbewegt sich nach unten. Sie können bdamit Haltepunkte setzen c, "fortfahren" und den Stepping-Debugger beenden. Hoffentlich hilft das!
Matt Luongo

4
Dies sollte die akzeptierte Antwort sein. Es bietet alle regulären Funktionen des ursprünglichen Befehls pdb.set_trace ().
TBM

Gibt es eine Möglichkeit für eine ipython / ipdb-Version davon?
Gerrit

5

Wenn Sie Ipython haben , verwenden Sie es für unbegrenzte Attraktivität:

import ipdb; ipdb.set_trace() 

* unbegrenzte Attraktivität: genau wie bei ipython - automatische Vervollständigung, Färbung usw.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.