Come devo eseguire il debug di plug-Trac?
-
12-09-2019 - |
Domanda
sto per iniziare una discreta quantità di lavoro che si estende Trac per soddisfare le nostre esigenze di business. Finora ho usato PythonWin e ora NetBeans 6.5, come gli ambienti di sviluppo -. Nessuna di queste sembra fornire alcun modo di debug del plugin sto lavorando su
Sono totalmente nuovo a Python , quindi probabilmente non è stato impostato l'ambiente di sviluppo come potrebbe essere congfigured per farlo debug.
Mi sto perdendo qualcosa di ovvio? Sembra un po 'arcaica di dover ricorrere alla stampa i messaggi di debug al log Trac, che è come sto debug in questo momento.
Soluzione
È possibile creare uno script WSGI involucro ed eseguirlo in un debugger. Ad esempio:
import os
import trac.web.main
os.environ['TRAC_ENV'] = '/path/to/your/trac/env'
application = trac.web.main.dispatch_request
from flup.server.fcgi import WSGIServer
server = WSGIServer(application, bindAddress=("127.0.0.1", 9000), )
server.run()
Si potrebbe eseguire questo script nel debugger, ed è possibile utilizzare lighttpd come frontend per l'applicazione web con un config banale come questo:
server.document-root = "/path/to/your/trac/env"
server.port = 1234
server.modules = ( "mod_fastcgi" )
server.pid-file = "/path/to/your/trac/env/httpd.pid"
server.errorlog = "/path/to/your/trac/env/error.log"
fastcgi.server = ( "/" =>
(( "host" => "127.0.0.1",
"port" => 9000,
"docroot" => "/",
"check-local" => "disable",
))
)
Basta eseguire l'involucro fcgi WSGI nel debugger, impostare i punti di interruzione nel vostro plugin, e aprire la pagina web.
Altri suggerimenti
Di solito, unit test per prima.
Quindi, scriviamo messaggi di log per diagnosticare i problemi.
In genere non dipendono pesantemente il debug perché è spesso difficile da fare in situazioni in cui gli script Python sono incorporati in un prodotto più grande.
Ho trovato che Winpdb è un debugger Python decente.
Ma, come sottolinea S. Lott, debugger non può essere molto utile a voi quando il progetto è inserito all'interno di uno più grande.
Trac contiene buoni esempi di codice Python, usandolo come una linea guida vi aiuterà a evitare errori. Basta essere sicuri di testare il codice, e lo fa spesso da quando sei un nuovo Python ... Troverete non hai bisogno di un debugger.
Per unit test, controllare PyUnit .
L'ho trovato più utile per aggiungere quei messageboxes Trac fantasia in fase di esecuzione come il debug aiuto o il rintracciamento, proprio come questo:
from trac.web.chrome import add_notice
...
def any_function_somewhere(self, req, ...anyother args...):
...
var = ...some value...
add_notice(req, "my variable value I am tracing %s" % var)
A volte è più comodo di leggere la registrazione in seguito. Anche se funziona solo se la funzione che si sta eseguendo ha quel arg req
.