在ruby中管理跟踪代码

在ruby中管理跟踪代码,ruby,debugging,logging,Ruby,Debugging,Logging,因此,在启动新项目或调试现有项目时,我会使用大量跟踪代码/日志记录。我想知道您使用什么技术来管理它,因为我总是在执行提交之前删除它,然后如果有其他错误,就必须重写它 我在考虑建立一个包含所有跟踪代码的开发分支,主代码应该是干净的,但似乎很难筛选出什么是调试代码,什么应该合并 有什么建议吗?怎么样 def debug_only if $DEBUG yield end end ... debug_only { puts "Some tracing code." } 在命令行上传递-

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

我在考虑建立一个包含所有跟踪代码的开发分支,主代码应该是干净的,但似乎很难筛选出什么是调试代码,什么应该合并

有什么建议吗?

怎么样

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_方法、bind和define_方法使旧方法的副本匿名

然后你用它来表示

ruby -d -rdebug program.rb
怎么样

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_方法、bind和define_方法使旧方法的副本匿名

然后你用它来表示

ruby -d -rdebug program.rb

实际上,我已经在使用类似的东西:
defverbose()$verbose=true;产量确保$verbose=false end
并且我有一个log()函数,它只在$verbose为true时输出。但我的问题是实际的跟踪代码,它是一个真正的混乱,我只是不希望它出现在生产代码中,我希望我的代码没有任何调试特定的绒毛。啊哈,没有想到这可能会有帮助!实际上,我已经在使用类似的东西:
defverbose()$verbose=true;产量确保$verbose=false end
并且我有一个log()函数,它只在$verbose为true时输出。但我的问题是实际的跟踪代码,它是一个真正的混乱,我只是不希望它出现在生产代码中,我希望我的代码没有任何调试特定的绒毛。啊哈,没有想到这可能会有帮助!