Was ist der beste Weg für interaktives Debugging in Python?

8

Ich möchte die Introspektionsfähigkeit von Python für Debugging / Entwicklung nutzen, kann dafür aber kein geeignetes Tool finden.

Ich muss in die Shell (IPython zum Beispiel) an einer bestimmten Position oder bei einem bestimmten Ereignis eintreten (wie Ausnahme), wobei Locals und Globals der Shell auf die Frames des Frames gesetzt werden.

Mein eigener kurzer Hack, um es zu illustrieren:

%Vor%

Mit entsprechendem Aufruf von run_debug () von 'breakpoint' oder try / except. Aber natürlich muss dies viel poliert werden, vor allem, um mit Threaded Apps richtig zu arbeiten.

winpdb hat Haltepunkte mit der Konsole, aber ich habe keine Möglichkeit gefunden, die richtige Python-Shell schnell daraus zu starten, und eval () / exec () sind nicht sehr praktisch für langes Debuggen.

    
Daniel Kluev 22.07.2010, 14:23
quelle

5 Antworten

2

Für persönliche / Bildungszwecke können Sie WingIDE verwenden - sie haben einige ziemlich solide Debugging-Fähigkeiten.

Natürlich, wenn Sie sich nur darum sorgen, Werte zu ändern, können Sie immer raw_input() verwenden - aber das ist vielleicht nicht genug für Ihre Bedürfnisse.

    
Wayne Werner 22.07.2010, 14:31
quelle
3

Ähnlich wie das, was Sie bereits tun, gibt es ipdb . Effektiv ist es pdb mit ipythons Shell (d. H. Tab-Vervollständigung, all die verschiedenen magischen Funktionen, etc.).

Es macht tatsächlich genau das, was der kleine Code, den Sie in Ihrer Frage gepostet haben, schnippt, aber er verpackt ihn in einen einfachen "ipdb.set_trace ()" -Aufruf.

    
Joe Kington 22.07.2010 15:24
quelle
1

Ich denke, dass die Frage Python Drop in REPL ähnlich ist, was Sie tun möchten, werfen Sie einen Blick darauf (besonders auf die Antwort, die das Modul 'code' vorschlägt ). .

    
multiplydie 22.07.2010 14:37
quelle
0

PyScripter (FOSS) hat einen ziemlich guten Debugger eingebaut.

    
Ant 22.07.2010 14:48
quelle
0

Wenn Sie Ihren Code von ipython ausführen und eine Ausnahme auslösen, können Sie anschließend% debug aufrufen, um bei der Ausnahme in ein pdb zu fallen. Dies sollte dir geben, was du willst. Oder wenn Sie ipython -pdb ausführen, werden Sie automatisch in pdb fallen gelassen, wenn eine nicht abgefangene Ausnahme auftritt.

    
macedoine 22.07.2010 15:18
quelle

Tags und Links