我即将开始大量扩展 Trac 以适应我们的业务需求的工作。到目前为止,我使用 pythonWin 和现在的 Netbeans 6.5 作为开发环境——这些似乎都没有提供任何调试我正在开发的插件的方法。
我对 Python 完全陌生,所以可能还没有设置开发环境如何配置它来调试它。
我错过了一些明显的东西吗?不得不求助于将调试消息打印到 Trac 日志似乎有点过时,这就是我目前调试的方式。
我即将开始大量扩展 Trac 以适应我们的业务需求的工作。到目前为止,我使用 pythonWin 和现在的 Netbeans 6.5 作为开发环境——这些似乎都没有提供任何调试我正在开发的插件的方法。
我对 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
参数时才有效。