0
因此,在启动一个新项目或调试现有项目时,我使用了大量的跟踪代码/日志记录。我想知道你用什么技术来管理它,因为我总是在做一个提交之前最终删除它,然后必须重写它,如果有其他事情出错的话。在ruby中管理跟踪代码
我正在考虑开发一个带有所有跟踪代码的分支,并且主控将是干净的,但它似乎很难筛选什么是调试代码,以及应该合并的内容。
有什么建议吗?
因此,在启动一个新项目或调试现有项目时,我使用了大量的跟踪代码/日志记录。我想知道你用什么技术来管理它,因为我总是在做一个提交之前最终删除它,然后必须重写它,如果有其他事情出错的话。在ruby中管理跟踪代码
我正在考虑开发一个带有所有跟踪代码的分支,并且主控将是干净的,但它似乎很难筛选什么是调试代码,以及应该合并的内容。
有什么建议吗?
如何
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
事实上,我现在已经在使用一些非常相似:)`DEF详细($详细= TRUE;产量;确保$ verbose = false end`并且我有一个只在$ verbose为true时才输出的log()函数。但是我的问题在于实际的跟踪代码,它确实是一团糟,我只是不希望它在生产代码中存在,我希望我的代码没有任何特定于调试的绒毛。 – cloudhead 2009-07-06 04:45:53