2010-02-07 7 views
9

Llamo al python -m pdb myapp.py, cuando se produce una excepción, y normalmente me devolverán al intérprete de pdb para investigar el problema. Sin embargo, esta excepción se lanza después de haber llamado a través del curses.wrapper() y haber ingresado al modo curses, haciendo que el intérprete pdb sea inútil. ¿Cómo puedo solucionar esto?¿Utiliza un depurador y maldiciones al mismo tiempo?

+0

creo que podría haber http://wiki.python.org/moin/PythonDebuggers –

+13

Tengo una risa Infomation útiles en el título de esto. Sí, la depuración y las maldiciones parecen ir juntas en mi mente. – HLGEM

Respuesta

8

La respuesta de James es buena y la he modificado, pero también consideraría intentar dividir la lógica y las capas de presentación de mi programa. Mantenga las maldiciones como una capa delgada encima de una biblioteca y escriba un controlador simple que invoca las rutinas correctas para recrear el error. Entonces puedes bucear y hacer lo que sea necesario.

Otra forma en que puedo pensar es crear una función llamada debug o algo que te devuelve a la pantalla normal e invoca a pdb. Luego, póngalo justo antes del código que genera la excepción y ejecute su programa. Algo así como

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

Al parecer, esto es similar a lo que se hace con la función curses.wrapper. Se menciona brevemente en http://www.amk.ca/python/howto/curses/.

+0

Una sabia sugerencia para mantener la lógica de las maldiciones separadas, y gracias por el puntero 'curses.wrapper'. –

+0

De nada. –

7

Al no estar familiarizado con Python, puede que esto no sea exactamente lo que usted quiere. Pero aparentemente, winpdb puede adjuntarse a un script, al igual que gdb puede para un proceso en ejecución (IIUC).

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

No se deje engañar por el nombre, es independiente de la plataforma.

+1

Buena sugerencia. Me ganaste a esto. Sería la manera correcta de resolver este problema. También es útil para GUIs y procesos de daemon. –

+0

¡Lo había olvidado todo! –

+0

Supongo que no es posible adjuntar usando el pdb de la biblioteca central. –

0

uso pyclewn

puede utilizar pyclewn con vim. o usar AP-clon, el núcleo de pyclewn su buena, es como GDB, puede depurar a distancia

Cuestiones relacionadas