Pergunta

Eu estou chamando python -m pdb myapp.py, quando um incêndio de exceção, e eu normalmente ser jogado de volta para o intérprete pdb para investigar o problema. No entanto, esta exceção está sendo lançada depois de eu ter chamado através curses.wrapper() e entrou no modo de maldições, tornando o pdb intérprete inútil. Como posso resolver isso?

Foi útil?

Solução

James` resposta é uma boa e eu upvoted-lo, mas eu também considerar a tentar dividir a lógica e apresentação camadas de meu programa. Mantenha a parte maldições uma fina camada em cima de uma biblioteca e escrever um driver simples que invoca as rotinas corretas para recriar o erro. Depois, você pode mergulhar e fazer o que é necessário.

Outra maneira que eu posso pensar é criar uma função chamada debug ou algo que você joga de volta para a tela e invoca pdb regular. Em seguida, colocá-lo apenas antes do código que levanta a exceção e executar o programa. Algo como

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

Aparentemente, este é semelhante ao que é feito com a função curses.wrapper. É mencionado brevemente em http://www.amk.ca/python/howto/curses/.

Outras dicas

Não estar familiarizado com o Python, isso pode não ser exatamente o que você quer. Mas, aparentemente, winpdb pode anexar a um script - como gdb lata para um processo em execução (IIUC).

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

Do not ser enganados pelo nome, é independente de plataforma.

uso pyclewn

Você pode usar pyclewn com o vim. ou uso APO-clone, o núcleo de pyclewn sua boa, é como gdb, pode remoto depuração

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top