我即將開始大量工作來擴展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。