def wrap_trace_capture(script)
  "
  begin
    #{script}
  rescue Exception=>e
    true_backtrace = Marshal.load(Marshal.dump(e.backtrace))
    e.define_singleton_method(:correct_backtrace) do
      e.backtrace.replace(true_backtrace)
    end
    raise e
  end
  "
end

begin
  eval(wrap_trace_capture('foo'))
rescue Exception=>e
  p e
  p e.backtrace
  e.correct_backtrace if e.respond_to?(:correct_backtrace)
  raise e
end