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.

Devin
quelle

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.

Ned Batchelder
quelle
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.

Matt Luongo
quelle
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.

Shubham Chaudhary
quelle
1

Wenn Sie Pytest verwenden , können Sie verwenden

import pytest; pytest.set_trace()

Siehe Dokumentation .

gerrit
quelle