2010-02-07 13 views
9

Ich rufe python -m pdb myapp.py, wenn eine Ausnahme ausgelöst wird, und ich würde normalerweise zurück zum pdb-Interpreter geworfen werden, um das Problem zu untersuchen. Diese Exception wird jedoch ausgelöst, nachdem ich curses.wrapper() aufgerufen und in den Cursurs-Modus gewechselt habe, was den PDB-Interpreter nutzlos gemacht hat. Wie kann ich das umgehen?Debugger verwenden und gleichzeitig fluchen?

+0

Remote-debuggen kann ich es denke infomation http://wiki.python.org/moin/PythonDebuggers nützlich sein könnten –

+13

ich ein Lachen bekam im Titel davon. Ja, Debugging und Fluchen scheinen in meinem Kopf zusammen zu gehen. – HLGEM

Antwort

8

James 'Antwort ist eine gute und ich habe es aufgewertet, aber ich würde auch in Betracht ziehen, die Logik und Präsentation Schichten meines Programms zu teilen. Halten Sie den Fluch Teil einer dünnen Schicht über einer Bibliothek und schreiben Sie einen einfachen Treiber, der die richtigen Routinen aufruft, um den Fehler neu zu erstellen. Dann kannst du eintauchen und tun, was nötig ist.

Eine andere Möglichkeit, die ich mir vorstellen kann, ist eine Funktion namens debug oder etwas, das Sie zurück in den regulären Bildschirm wirft und ruft pdb. Dann kleben Sie es kurz vor dem Code, der die Ausnahme auslöst und führen Sie Ihr Programm aus. So etwas wie

def debug(stdscr): 
    curses.nocbreak() 
    stdscr.keypad(0) 
    curses.echo() 
    curses.endwin() 
    import pdb; pdb.set_trace() 

Offenbar ist dies ähnlich dem, was mit der curses.wrapper Funktion erfolgt. Es wird kurz unter http://www.amk.ca/python/howto/curses/ erwähnt.

+0

Ein kluger Vorschlag, um die Curses-Logik getrennt zu halten, und danke für den 'curses.wrapper'-Zeiger. –

+0

Gern geschehen. –

7

Wenn Sie Python nicht kennen, ist dies möglicherweise nicht genau das, was Sie wollen. Aber anscheinend kann winpdb an ein Skript anhängen - genau wie gdb an einen laufenden Prozess (IIUC).

http://winpdb.org/docs/launch-time/

Sie durch den Namen nicht täuschen, ist es plattformunabhängig.

+1

Guter Vorschlag. Du hast mich dazu geschlagen. Es wäre der richtige Weg, um dieses Problem zu lösen. Auch nützlich für GUIs und Daemon-Prozesse. –

+0

Ich hatte alles vergessen! –

+0

Ich nehme nicht an, dass es möglich ist, mit der PDB der Core-Bibliothek zu verbinden? –

0

Verwendung pyclewn

Sie pyclewn mit vim verwenden können. oder PDB-Klon, den Kern der pyclewn seine gut, es ist wie gdb,

Verwandte Themen