管理ruby中的跟踪代码

时间:2009-07-06 02:47:42

标签: ruby debugging logging

因此,在启动新项目或调试现有项目时,我会使用大量跟踪代码/日志记录。我想知道你用什么技术来管理它,因为我总是在做提交之前删除它,然后如果出现其他问题则必须重写它。

我正在考虑使用包含所有跟踪代码的开发分支,并且主服务器将是干净的,但似乎很难筛选出什么是调试代码,以及应该合并的内容。

有什么建议吗?

1 个答案:

答案 0 :(得分: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

在这种情况下,一种可能性是将跟踪代码与您正在跟踪的内容分开。

例如:

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