2010-02-07 11 views
9

Sto chiamando python -m pdb myapp.py, quando si attiva un'eccezione e normalmente verrei ricondotto all'interprete pdb per indagare sul problema. Tuttavia questa eccezione viene lanciata dopo che ho chiamato attraverso curses.wrapper() e inserito la modalità curses, rendendo l'interprete pdb inutile. Come posso aggirare questo?Utilizzare un debugger e maledire allo stesso tempo?

+0

penso che ci potrebbe essere http://wiki.python.org/moin/PythonDebuggers Informazioni utili –

+13

ho ottenuto una risata al titolo di questo. Sì, debugging e imprecazioni sembrano andare insieme nella mia mente. – HLGEM

risposta

8

La risposta di James` è buona e l'ho svalutato, ma vorrei anche provare a suddividere i livelli di logica e presentazione del mio programma. Mantieni le curses parte un sottile strato su una libreria e scrivi un semplice driver che invoca le routine corrette per ricreare l'errore. Quindi puoi tuffarti e fare ciò che è necessario.

Un altro modo in cui posso pensare è creare una funzione chiamata debug o qualcosa che ti riporti nella schermata normale e invochi pdb. Quindi incollalo appena prima del codice che solleva l'eccezione ed esegui il tuo programma. Qualcosa di simile

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

Apparentemente, questo è simile a quello che si fa con la funzione curses.wrapper. Viene citato brevemente allo http://www.amk.ca/python/howto/curses/.

+0

Un saggio suggerimento per mantenere separata la logica delle curses e grazie per il puntatore 'curses.wrapper'. –

+0

Prego. –

7

Non avendo familiarità con Python, questo potrebbe non essere esattamente ciò che si desidera. Ma a quanto pare, winpdb può collegarsi a uno script - proprio come gdb can a un processo in esecuzione (IIUC).

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

Non fatevi ingannare dal nome, è indipendente dalla piattaforma.

+1

Buon suggerimento. Mi hai battuto su questo. Sarebbe il modo giusto per affrontare questo problema. Utile anche per i GUI e i processi demone. –

+0

Mi ero dimenticato di tutto! –

+0

Non credo sia possibile collegarlo usando il pdb della libreria di base? –

0

uso pyclewn

è possibile utilizzare pyclewn con vim. o utilizzare PDB-clone, il nucleo della pyclewn suo bene, il suo gdb come, in grado di eseguire il debug remoto

Problemi correlati