我即将开始大量工作来扩展Trac以适应我们的业务需求。 到目前为止,我已经使用pythonWin和现在的Netbeans 6.5作为开发环境 - 它们都不能提供任何方式来调试我正在使用的插件。我该如何调试Trac插件?
我完全是Python的新手所以可能还没有设置开发环境如何配置它来调试。
我错过了一些明显的东西吗?这似乎有点过时,不得不求助于打印调试消息到Trac日志,这是我目前正在调试的方式。
我即将开始大量工作来扩展Trac以适应我们的业务需求。 到目前为止,我已经使用pythonWin和现在的Netbeans 6.5作为开发环境 - 它们都不能提供任何方式来调试我正在使用的插件。我该如何调试Trac插件?
我完全是Python的新手所以可能还没有设置开发环境如何配置它来调试。
我错过了一些明显的东西吗?这似乎有点过时,不得不求助于打印调试消息到Trac日志,这是我目前正在调试的方式。
您可以创建一个包装器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包装器,在插件中设置断点,然后打开网页。
通常,我们先进行单元测试。
然后,我们写日志消息来诊断问题。
我们通常不会严重依赖调试,因为在Python脚本嵌入到更大的产品中时,通常很难做到这一点。
我发现Winpdb是一个体面的python调试器。
但正如S.Lott指出的那样,当您的项目嵌入到较大的项目中时,调试器对您来说可能不是很有用。
Trac包含很好的Python代码示例,将它用作指导将有助于避免错误。只要确定测试了你的代码,并且经常这样做,因为你是Python新手......你会发现你不需要调试器。
对于单元测试,请查看PyUnit。
我发现它最有用的在运行时的调试帮助或跟踪添加那些花哨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。