2009-02-12 13 views

Répondre

55

utilisez Winpdb. Il s'agit d'un débogueur graphique GPL Python indépendant de la plate-forme avec prise en charge du débogage distant sur un réseau, plusieurs threads, modification d'espace de noms, débogage intégré, communication cryptée et jusqu'à 20 fois plus rapide que pdb.

Caractéristiques:

  • licence GPL. Winpdb est un logiciel libre.
  • Compatible avec CPython 2.3 à 2.6 et Python 3000
  • Compatible avec wxPython 2.6 à 2.8
  • plate-forme indépendante, et testé sur Ubuntu Gutsy et Windows XP.
  • Interfaces utilisateur: rpdb2 est basé sur la console, tandis que winpdb requiert wxPython 2.6 ou version ultérieure.

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

+0

sudo aptitude installer winpdb –

16

Eh bien, vous pouvez obtenir quelque chose de tout à fait semblable à celle utilisant un trou d'homme tordu, qui fonctionne comme ceci:

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

Ensuite, vous connectez simplement au programme sur ssh;

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

En utilisant foobar comme mot de passe. Lorsque vous vous connectez, vous obtenez une invite python normale, où vous pouvez simplement piquer sur les données. Ce n'est pas tout à fait la même chose que d'envoyer une traceback à un hôte.

Maintenant, cela pourrait être difficile à intégrer à un programme d'interface graphique, dans ce cas, vous pourriez avoir besoin de choisir un autre réacteur, par exemple des programmes basés sur GTK utilisé le gtk2reactor etc.

Si vous voulez que le retraçage réelle envoyé Vous devez créer un canal de socket pour stderr, stdin et stdout sur le réseau au lieu d'imprimer sur votre hôte local. Ne devrait pas être trop difficile à accomplir en utilisant tordu.

2

Deux solutions de IDEs modernes:

  1. PTVs multiplateforme débogage à distance

  2. PyCharm/PyDev débogage à distance

+0

Pycharm exige que ce soit la version professionnelle – gdbj

+0

PTVS semble avoir beaucoup de problèmes, surtout avec les conteneurs. Et CPython n'est pas supporté? – user1712447

9

Un peu en retard, b ut est ici une solution avec l'aimable autorisation de débogage à distance très léger de http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible:

  1. pip install epdb sur l'hôte distant.
  2. Assurez-vous que la configuration de votre pare-feu n'autorise pas les connexions non locales au port 8080 sur l'hôte distant, puisque epdb écoute par défaut sur n'importe quelle adresse (INADDR_ANY), pas 127.0.0.1.
  3. Au lieu d'utiliser import pdb; pdb.set_trace() dans votre programme, utilisez import epdb; epdb.serve().
  4. Connectez-vous en toute sécurité à l'hôte distant, car epdb.connect() utilise telnet.
  5. Attachez au programme en utilisant python -c 'import epdb; epdb.connect()'.

Ajustez les bits de sécurité en fonction de votre position de configuration du réseau local et de la sécurité, bien sûr.

+1

Cela m'a aidé à déboguer une application python qui s'exécute dans un conteneur Docker. La configuration a été encore compliquée par l'utilisation de Docker Compose et de nginx + uwsgi pour exécuter l'application python, donc aucune des autres solutions n'a fonctionné pour moi. Celui-ci a fait. –

+0

C'est le moyen le plus simple de déboguer des applications curses. À votre santé! – Qix

Questions connexes