57 votes

Comment puis-je attacher un débogueur distant à un Python processus?

Je suis fatigué de l'insertion

import pdb; pdb.set_trace()

lignes dans mon Python et le débogage des programmes par le biais de la console. Comment puis-je connecter un débogueur distant et insérer des points d'arrêt à partir d'un civilisé de l'interface utilisateur?

57voto

nosklo Points 75862

utilisation Winpdb. C'est une plate-forme indépendante de graphique GPL Python débogueur avec le support pour le débogage à distance via un réseau, plusieurs threads, de l'espace de noms de modification, de débogage intégré, une communication chiffrée et est jusqu'à 20 fois plus rapide que l'apb.

Caractéristiques:

  • Licence GPL. Winpdb est un Logiciel Libre.
  • Compatible avec Disponible 2.3 à 2.6 et Python 3000
  • Compatible avec wxPython 2.6 grâce à 2.8
  • Indépendant de la plateforme, et testé sur Ubuntu Gutsy et Windows XP.
  • Les Interfaces utilisateur: rpdb2 est de la console, alors que la winpdb nécessite wxPython 2.6 ou version ultérieure.

Screenshot

18voto

Johan Dahlin Points 6296

Eh bien, vous pouvez obtenir quelque chose de tout à fait similaire à l'aide d'une entorse à une bouche d'égout, 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 suffit de vous connecter à ce programme au cours de ssh;

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

À l'aide de foobar comme mot de passe.

Lorsque vous vous connectez, vous obtiendrez un normal invite python où vous pouvez simplement vous piquez les données. Ce n'est pas tout à fait la même que l'obtention d'un traceback envoyés à un ordinateur hôte.

Maintenant, cela peut être difficile à intégrer à un programme GUI, dans ce cas, vous pourriez avoir besoin de choisir un autre réacteur, par exemple pour gtk en fonction des programmes utilisés le gtk2reactor etc.

Si vous souhaitez que le réel traceback envoyé plus de vous avez besoin pour créer un socket canal pour les deux stderr, stdin et stdout qui se passe sur le réseau au lieu d'imprimer sur votre machine locale. Ne devrait pas être trop difficile à réaliser en utilisant tordu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X