在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时输出。但我的问题是实际的跟踪代码,它是一个真正的混乱,我只是不希望它出现在生产代码中,我希望我的代码没有任何调试特定的绒毛。啊哈,没有想到这可能会有帮助!