2009-06-08 6 views
4

Ich bin gerade dabei, eine Menge Arbeit zu starten, die Trac auf unsere Geschäftsanforderungen ausdehnt. Bis jetzt habe ich pythonWin und jetzt Netbeans 6.5 als Entwicklungsumgebung verwendet - keine davon scheint mir eine Möglichkeit zu bieten, das Plugin, an dem ich gerade arbeite, zu debuggen.Wie sollte ich Trac-Plugins debuggen?

Ich bin völlig neu in Python so wahrscheinlich haben die Entwicklungsumgebung nicht eingerichtet, wie es konfiguriert werden könnte, um es zu debuggen.

Fehle ich etwas offensichtlich? Es scheint ein wenig archaisch zu sein, auf das Drucken von Debug-Nachrichten in das Trac-Protokoll zurückgreifen zu müssen, so wie ich gerade debugge.

Antwort

2

Sie können ein Wrapper-WSGI-Skript erstellen und es in einem Debugger ausführen. Zum Beispiel:

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

Sie würden dieses Skript im Debugger ausgeführt werden, und Sie können lighttpd als Frontend für die Web-Anwendung mit einem trivialen Config wie diese verwenden:

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", 
)) 
) 

Führen Sie einfach die fcgi wsgi wrapper im Debugger, setze die Breakpoints in deinem Plugin und öffne die Webseite.

0

In der Regel werden zuerst Unit-Tests durchgeführt.

Dann schreiben wir Protokollmeldungen zur Diagnose von Problemen.

Wir sind im Allgemeinen nicht stark vom Debuggen abhängig, da es in Situationen, in denen Python-Skripts in ein größeres Produkt eingebettet sind, oft schwierig ist.

0

Ich habe festgestellt, dass Winpdb ist ein anständiger Python-Debugger.

Aber wie S.Lott hervorhebt, sind Debugger möglicherweise nicht sehr nützlich für Sie, wenn Ihr Projekt in ein größeres eingebettet ist.

0

Trac enthält gute Beispiele für Python-Code, die Verwendung als Richtlinie hilft Fehler zu vermeiden. Stellen Sie sicher, dass Sie Ihren Code testen, und zwar oft, da Sie Python noch nicht kennen. Sie werden feststellen, dass Sie keinen Debugger benötigen.

Zum Testen der Einheit, überprüfen Sie .

0

Ich fand es sehr nützlich, diese Phantasie Trac Message zur Laufzeit als Debug-Hilfe oder Tracing, wie dies hinzuzufügen:

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) 

Manchmal ist es bequemer ist, als danach die Protokollierung zu lesen. Obwohl es nur funktioniert, wenn die Funktion, die Sie gerade ausführen, req arg hat.