Como faço para anexar um depurador remoto a um processo de Python?
-
23-08-2019 - |
Pergunta
Estou cansado de inserção
import pdb; pdb.set_trace()
linhas em meus programas em Python e depuração por meio do console. Como faço para conectar um depurador remoto e inserir pontos de interrupção a partir de uma interface de usuário civilizado?
Solução
Winpdb . É um independente de plataforma gráfica GPL Python debugger com suporte para depuração remota através de uma rede, vários segmentos, modificação namespace, depuração incorporado, comunicação criptografada e é até 20 vezes mais rápido do que pdb.
características:
-
licença
- GPL. Winpdb é Software Livre.
- Compatível com CPython 2.3 a 2.6 e Python 3000
- Compatível com wxPython de 2.6 a 2.8
- independente de plataforma, e testado no Ubuntu Gutsy e Windows XP.
- User Interfaces:. Rpdb2 é baseado console, enquanto winpdb requer wxPython 2.6 ou posterior
(fonte: winpdb.org )
Outras dicas
Bem, você pode obter algo bastante semelhante ao que o uso de um bueiro torcida, que Funciona assim:
from twisted.internet import reactor
from twisted.cred import portal, checkers
from twisted.conch import manhole, manhole_ssh
def getManholeFactory(namespace):
realm = manhole_ssh.TerminalRealm()
def getManhole(_):
return manhole.Manhole(namespace)
realm.chainedProtocolFactory.protocolFactory = getManhole
p = portal.Portal(realm)
p.registerChecker(
checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar'))
f = manhole_ssh.ConchFactory(p)
return f
reactor.listenTCP(2222, getManholeFactory(globals()))
reactor.run()
Então você acabou de entrar para o programa sobre ssh;
$ ssh admin@localhost -p 2222
admin@localhost's password:
Usando foobar como a senha.
Quando você entrar você vai ter um normal do Python rápida onde você pode apenas cutucar os dados. Não é exatamente o mesmo que obter um rastreamento enviados através de um host.
Agora, isso pode ser complicado para integrar a um programa GUI, nesse caso, você pode precisar escolher um outro reator, por exemplo, para programas baseado em GTK usado o gtk2reactor etc.
Se quiser que o enviado traceback real sobre o que você precisa para criar um canal de soquete tanto para stderr, stdin e stdout que vai através da rede em vez de imprimir ao seu host local. Não deve ser muito difícil de realizar usando torcida.
Um pouco tarde, mas aqui é uma solução de depuração muito leve remoto cortesia de http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :
-
pip install epdb
no host remoto. - Certifique-se de sua configuração de firewall não está permitindo conexões não-locais para a porta 8080 no host remoto, desde padrões
epdb
para ouvir em qualquer endereço (INADDR_ANY
), não 127.0.0.1. - Em vez de usar
import pdb; pdb.set_trace()
em seu programa,import epdb; epdb.serve()
uso. - segurança efetuar login no host remoto, desde usos
epdb.connect()
telnet. - Anexar ao programa usando
python -c 'import epdb; epdb.connect()'
.
Ajustar os bits de segurança para se adequar a sua postura configuração de rede e de segurança local, é claro.
Duas soluções de IDEs modernas:
-
PTVs multi-plataforma de depuração remota ??p>
-
PyCharm / PyDev remoto depuração