binding

Kernel#bindingを使ってBindingオブジェクトを得ると、「環境」(評価を行うためのコンテキスト情報)を得ることができます。evalの第二引数にBindingオブジェクトを渡すと、その環境を用いて式を評価することができます。
ri Bindingの解説によれば、Kernel#set_trace_funcのコールバックでも使えるようです。なるほど。「このポイントでこの式を評価するとどうなるか」を試せるのですね。
以下の例では、再帰的に実装したfactorialメソッドの各ステップでの環境を配列$envに保持しており、後から「あの時点で"[n, f]"を評価したら」を表示しています。

$env = Array.new

def factorial(n)
  f = 1
  if n <= 0
    f
  else
    f = factorial(n - 1)
    f *= n
  end
  $env[n] = binding()
  f
end

p factorial(10)
(0..10).each do |i|
  p eval("[n, f]", $env[i])
end

実行結果です。

3628800
[0, 1]
[1, 1]
[2, 2]
[3, 6]
[4, 24]
[5, 120]
[6, 720]
[7, 5040]
[8, 40320]
[9, 362880]
[10, 3628800]