2009-06-08 35 views
4

我即将开始大量工作来扩展Trac以适应我们的业务需求。 到目前为止,我已经使用pythonWin和现在的Netbeans 6.5作为开发环境 - 它们都不能提供任何方式来调试我正在使用的插件。我该如何调试Trac插件?

我完全是Python的新手所以可能还没有设置开发环境如何配置它来调试。

我错过了一些明显的东西吗?这似乎有点过时,不得不求助于打印调试消息到Trac日志,这是我目前正在调试的方式。

回答

2

您可以创建一个包装器wsgi脚本并在调试器中运行它。例如:

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

你会在调试器中运行此脚本,并且可以使用的lighttpd作为前端Web应用程序有一个简单的配置像这样的:

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

只要运行FCGI调试器中的wsgi包装器,在插件中设置断点,然后打开网页。

0

通常,我们先进行单元测试。

然后,我们写日志消息来诊断问题。

我们通常不会严重依赖调试,因为在Python脚本嵌入到更大的产品中时,通常很难做到这一点。

0

我发现Winpdb是一个体面的python调试器。

但正如S.Lott指出的那样,当您的项目嵌入到较大的项目中时,调试器对您来说可能不是很有用。

0

Trac包含很好的Python代码示例,将它用作指导将有助于避免错误。只要确定测试了你的代码,并且经常这样做,因为你是Python新手......你会发现你不需要调试器。

对于单元测试,请查看PyUnit

0

我发现它最有用的在运行时的调试帮助或跟踪添加那些花哨Trac系统提示消息框,就像这样:

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) 

有时候它比事后阅读记录更舒适。虽然它只适用于你正在运行的功能有req arg。