Usando um depurador e maldições ao mesmo tempo?
-
19-09-2019 - |
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?
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