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

And*_*zub 4 ruby ruby-on-rails

我的测试中的一些宝石设置$stdoutdev/null.有没有办法在每次$stdout更改时引发错误?或者是否有其他方法可以跟踪哪些变化呢?

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

Ama*_*dan 5

set_trace_func proc { |event, file, line, id, binding, classname|
  if $stdout != STDOUT
    STDOUT.puts "$stdout changed at #{file}:#{line}"
    exit
  end
}
Run Code Online (Sandbox Code Playgroud)

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