2009-07-06 128 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