Domanda

Sono stanco di inserire

import pdb; pdb.set_trace()

linee in miei programmi Python e il debug tramite la console. Come faccio a collegare un debugger remoto e inserisco i punti di interruzione da un'interfaccia utente civilizzato?

È stato utile?

Soluzione

Winpdb . Si tratta di un piattaforma indipendente grafica debugger GPL pitone con il supporto per il debug remoto su una rete, più thread, modifica namespace, debug incorporato comunicazione criptata ed è fino a 20 volte più veloce pdb.

Caratteristiche:

  • licenza GPL. Winpdb è Software Libero.
  • Compatibile con CPython 2.3 a 2.6 e Python 3000
  • Compatibile con wxPython 2.6 tramite 2.8
  • Indipendente dalla piattaforma, e testato su Ubuntu Gutsy e Windows XP.
  • Interfacce utente:. Rpdb2 si basa console, mentre Winpdb richiede wxPython 2.6 o versione successiva

Schermata
(fonte: winpdb.org )

Altri suggerimenti

Bene, si può ottenere qualcosa di molto simile a quello con un tombino contorto, che funziona in questo modo:

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

Poi basta il login al programma tramite ssh;

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

Utilizzando foobar come password.

Quando si accede si otterrà un prompt di pitone normale in cui si può solo colpire i dati. Non è proprio la stessa cosa come ottenere un traceback inviato oltre a un host.

Ora, questo potrebbe essere difficile da integrare a un programma con interfaccia grafica, in questo caso potrebbe essere necessario scegliere un altro reattore, ad esempio per i programmi basati GTK utilizzato il gtk2reactor etc.

Se si desidera che il traceback attuale inviato oltre il necessario per creare un canale di presa sia per stderr, stdin e stdout, che va oltre la rete, invece di stampa al vostro host locale. Non dovrebbe essere troppo difficile da realizzare utilizzando contorto.

Un po 'in ritardo, ma qui è un molto leggero remota soluzione di debug per gentile concessione di http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible :

  1. pip install epdb sulla macchina remota.
  2. Assicurati che la configurazione del firewall non permette connessioni non locali a porta 8080 sulla macchina remota, dal momento che di default epdb di ascolto su qualsiasi indirizzo (INADDR_ANY), non 127.0.0.1.
  3. Invece di usare import pdb; pdb.set_trace() nel vostro programma, l'uso import epdb; epdb.serve().
  4. saldamente accedere all'host remoto, dal momento che epdb.connect() utilizza telnet.
  5. Fissare al programma tramite python -c 'import epdb; epdb.connect()'.

Regolare i bit di sicurezza per soddisfare la vostra configurazione e sicurezza della rete locale di posizione, naturalmente.

Due soluzioni di IDE moderno:

  1. PTVS piattaforme debug remoto

  2. PyCharm / PyDev debug remoto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top