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?

Foi útil?

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

Captura de tela
(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 :

  1. pip install epdb no host remoto.
  2. 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.
  3. Em vez de usar import pdb; pdb.set_trace() em seu programa, import epdb; epdb.serve() uso.
  4. segurança efetuar login no host remoto, desde usos epdb.connect() telnet.
  5. 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:

  1. PTVs multi-plataforma de depuração remota

  2. PyCharm / PyDev remoto depuração

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