Pregunta

Estoy cansado de insertar

import pdb; pdb.set_trace()

líneas en mis programas Python y depuración a través de la consola.¿Cómo conecto un depurador remoto e inserto puntos de interrupción desde una interfaz de usuario civilizada?

¿Fue útil?

Solución

usar Winpdb.Es un plataforma independiente Depurador gráfico GPL Python con soporte para depuración remota a través de una red, múltiples subprocesos, modificación del espacio de nombres, depuración integrada, comunicación cifrada y es hasta 20 veces más rápido que pdb.

Características:

  • Licencia GPL.Winpdb es software libre.
  • Compatible con CPython 2.3 a 2.6 y Python 3000
  • Compatible con wxPython 2.6 a 2.8
  • Independiente de la plataforma y probado en Ubuntu Gutsy y Windows XP.
  • Interfaces de usuario:rpdb2 está basado en consola, mientras que winpdb requiere wxPython 2.6 o posterior.

Screenshot
(fuente: winpdb.org)

Otros consejos

Bueno, puedes obtener algo bastante similar a eso usando una alcantarilla retorcida, que funciona así:

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() 

Luego simplemente inicia sesión en el programa a través de ssh;

$ ssh admin@localhost -p 2222
admin@localhost's password: 

Usando Foobar como contraseña.

Cuando inicies sesión, recibirás un mensaje normal de Python donde podrás acceder a los datos.No es lo mismo que enviar un rastreo a un host.

Ahora bien, esto puede ser complicado de integrar a un programa GUI, en ese caso es posible que deba elegir otro reactor, por ejemplo, para programas basados ​​en gtk se usa gtk2reactor, etc.

Si desea que se envíe el rastreo real, debe crear un canal de socket para stderr, stdin y stdout que pase por la red en lugar de imprimir en su host local.No debería ser demasiado difícil lograrlo usando retorcido.

Un poco tarde, pero aquí es una solución de depuración remota de cortesía muy ligero de http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :

  1. pip install epdb en el host remoto.
  2. Asegúrese de que su configuración de cortafuegos no permite conexiones no locales al puerto 8080 en el host remoto, ya que por defecto epdb a escuchar en cualquier dirección (INADDR_ANY), no 127.0.0.1.
  3. En lugar de utilizar import pdb; pdb.set_trace() en su programa, import epdb; epdb.serve() uso.
  4. segura inicie sesión en el host remoto, desde epdb.connect() utiliza telnet.
  5. Adjuntar al programa usando python -c 'import epdb; epdb.connect()'.

Ajustar los bits de seguridad para adaptarse a su posición de instalación y seguridad de la red local, por supuesto.

Dos soluciones de IDE modernos:

  1. Depuración remota multiplataforma PTVS

  2. Depuración remota de PyCharm/PyDev

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top