2009-07-06 124 views
0

因此,在啓動一個新項目或調試現有項目時,我使用了大量的跟蹤代碼/日誌記錄。我想知道你用什麼技術來管理它,因爲我總是在做一個提交之前最終刪除它,然後必須重寫它,如果有其他事情出錯的話。在ruby中管理跟蹤代碼

我正在考慮開發一個帶有所有跟蹤代碼的分支,並且主控將是乾淨的,但它似乎很難篩選什麼是調試代碼,以及應該合併的內容。

有什麼建議嗎?

回答

3

如何

def debug_only 
    if $DEBUG 
    yield 
    end 
end 
... 
debug_only { puts "Some tracing code." } 

在命令行上傳遞-d會讓$DEBUG真。

% ruby -e 'p $DEBUG' 
false 

% ruby -de 'p $DEBUG' 
true 

在這種情況下,有一種可能性是將跟蹤代碼與正在跟蹤的代碼分開。

對於eacample:

release.rb:

class A 
    def stuff(a, b) 
    # do stuff ... 
    end 
end 

debug.rb:

require 'release' 
class A 
    alias release_stuff stuff 
    def stuff(a, b) 
    puts "calling stuff with (#{a.inspect}, #{b.inspect})" 
    rv = release_stuff(a,b) 
    puts "Done calling stuff." 
    rv 
    end 
end 

這具有這樣的粒度問題是一個方法,然後再它會鼓勵你編寫更小的方法。當然,你可以用一些「元編程」來減少冗長。

您還可以使用instance_method,bind和define_method使舊方法的副本成爲匿名。

然後使用它像

ruby -d -rdebug program.rb 
+0

事實上,我現在已經在使用一些非常相似:)`DEF詳細($詳細= TRUE;產量;確保$ verbose = false end`並且我有一個只在$ verbose爲true時才輸出的log()函數。但是我的問題在於實際的跟蹤代碼,它確實是一團糟,我只是不希望它在生產代碼中存在,我希望我的代碼沒有任何特定於調試的絨毛。 – cloudhead 2009-07-06 04:45:53