2009-02-12 19 views

Respuesta

55

use Winpdb. Es un plataforma independiente gráfica de GPL Python depurador con soporte para la depuración remota a través de una red, múltiples hilos, modificación del espacio de nombres, depuración incorporada, comunicación encriptada 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 la consola, mientras que winpdb requiere wxPython 2.6 o posterior.

Screenshot http://winpdb.org/images/screenshot_winpdb_small.jpg

+0

sudo aptitude install winpdb –

16

Bueno, usted puede conseguir algo bastante similar a la que el uso de una boca de hombre retorcido, 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() 

A continuación, sólo iniciar sesión en el programa a través de ssh;

$ ssh [email protected] -p 2222 
[email protected]'s password: 

Usando foobar como la contraseña.

Cuando inicie sesión, recibirá un aviso normal de Python en el que puede examinar los datos. No es exactamente lo mismo que obtener un rastreo enviado a un host.

Ahora, esto podría ser difícil de integrar en un programa de interfaz gráfica de usuario, en ese caso puede que tenga que elegir otro reactor, por ejemplo, para los programas basados ​​en GTK utilizado el gtk2reactor etc.

Si desea que el rastreo real enviada Además, 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 de lograr mediante el uso de retorcido.

2

Dos soluciones de entornos de desarrollo modernos:

  1. PTVS multiplataforma depuración remota

  2. PyCharm/depuración remota PyDev

+0

Pycharm requiere que sea la versión profesional – gdbj

+0

PTVS parece tener un montón de problemas, especialmente con contenedores. Y CPython no es compatible? – user1712447

9

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

  1. pip install epdb en el host remoto.
  2. Asegúrate de que tu configuración de cortafuegos no permite conexiones no locales al puerto 8080 en el host remoto, ya que epdb está predeterminado para escuchar en cualquier dirección (INADDR_ANY), no en 127.0.0.1.
  3. En lugar de usar import pdb; pdb.set_trace() en su programa, use import epdb; epdb.serve().
  4. Inicie sesión de forma segura en el host remoto, ya que epdb.connect() utiliza telnet.
  5. Se conecta al programa usando python -c 'import epdb; epdb.connect()'.

Ajuste los bits de seguridad para adaptarse a la configuración de red local y la postura de seguridad, por supuesto.

+1

Esto me ayudó a depurar una aplicación de Python que se ejecuta dentro de un contenedor Docker. La configuración se complicó aún más con el uso de Docker Compose y nginx + uwsgi para ejecutar la aplicación de Python, por lo que ninguna de las otras soluciones funcionó para mí. Este lo hizo. –

+0

Esta es la manera más hábil de depurar aplicaciones de curses. ¡Aclamaciones! – Qix

Cuestiones relacionadas