Je suis fatigué d'insérer
import pdb; pdb.set_trace()
lignes dans mes programmes Python et débogage via la console. Comment connecter un débogueur distant et insérer des points d'arrêt à partir d'une interface utilisateur civilisée?
utilisez Winpdb . Il s'agit d'un indépendant de la plate-forme GPL graphique Python débogueur avec prise en charge du débogage à distance sur un réseau, plusieurs threads, modification de l'espace de noms , débogage intégré, communication cryptée et jusqu'à 20 fois plus rapide que pdb.
Fonctionnalités:
(source: winpdb.org )
Eh bien, vous pouvez obtenir quelque chose de très similaire à cela en utilisant un regard 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 vous connectez simplement au programme via ssh;
$ ssh admin@localhost -p 2222
admin@localhost's password:
Utilisation de foobar comme mot de passe.
Lorsque vous vous connectez, vous obtiendrez une invite normale python où vous pouvez simplement piquer les données. Ce n'est pas tout à fait la même chose que d'obtenir un retraçage envoyé à un hôte.
Maintenant, cela peut être difficile à intégrer à un programme GUI, dans ce cas, vous devrez peut-être choisir un autre réacteur, par exemple pour les programmes basés sur gtk utilisés le gtk2reactor etc.
Si vous voulez que la traceback réelle soit envoyée, vous devez créer un canal de socket pour stderr, stdin et stdout qui passe sur le réseau au lieu d'imprimer sur votre hôte local. Ne devrait pas être trop difficile à réaliser en utilisant torsadé.
Un peu en retard, mais voici une solution de débogage à distance très légère gracieuseté de http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :
pip install epdb
Sur l'hôte distant.epdb
utilise par défaut l'écoute sur n'importe quelle adresse (INADDR_ANY
), Pas 127.0.0.1.import pdb; pdb.set_trace()
dans votre programme, utilisez import epdb; epdb.serve()
.epdb.connect()
utilise telnet.python -c 'import epdb; epdb.connect()'
.Ajustez les bits de sécurité en fonction de la configuration de votre réseau local et de votre position de sécurité, bien sûr.
Deux solutions d'IDE modernes:
Débogage à distance multiplateforme PTVS
Débogage à distance PyCharm/PyDev