Ruby:查找全局变量的更改位置

时间:2014-09-09 00:52:34

标签: ruby-on-rails ruby

我的测试中的一些宝石将$stdout设置为dev/null。有$stdout更改后是否有办法提出错误?或者是否有其他方法来跟踪改变它的方式?

更新:对于可能有类似问题的任何人 - 问题是ActiveSupport的quietlysilence_stream方法不是线程安全的。在这种情况下,activerecord-session_store是令人讨厌的宝石,请参阅https://github.com/rails/activerecord-session_store/pull/22

1 个答案:

答案 0 :(得分:5)

set_trace_func proc { |event, file, line, id, binding, classname|
  if $stdout != STDOUT
    STDOUT.puts "$stdout changed at #{file}:#{line}"
    exit
  end
}

嗯。我想这实际上是改变之后的行,技术上......如果你关心,你可以记住每个跟踪步骤中的前一个文件/行,然后打印出来。