The new IntelliTrace historical debugger feature in Visual Studio 2010 seems to fit what you're asking for. See Debugging With IntelliTrace:
Debugging with IntelliTrace, available
in Microsoft Visual Studio 2010
Ultimate, provides an enhanced picture
of your application compared with
traditional debuggers. Traditional
debuggers show you the state of your
application at the current time with
limited information about events that
occurred in the past. You must either
infer events that occurred in the
past, based on the state of your
application at the current time, or
restart the application to re-create
past events. With IntelliTrace, you
can actually see events that occurred
in the past and the context in which
they occurred. This reduces the number
of restarts that are required to debug
your application and the possibility
that an error will fail to reproduce
when you rerun the application.