Rec Debugger is a reversible debugger for .NET languages, like C# and VB.NET. It is aimed to provide a core subset of the normalCLR debugger functionality, but it also lets you do 'back-in-time' debugging, i.e. step backwards and examine past states.
Being able to rewind the state of a virtual machine can be useful for locating bugs that cause delayed symptoms. But it is also handy for reducing the penalty of accidentally stepping too far, and for postponing inspection of unexpected bugs while concentrating on an original bug.
If you see an incorrect field value - instead of starting over, trying to break when it is assigned and hoping that the same thing happens again - simply right-click 'Go to Last Modification'.
If you see a suspicious object - instead of trying to design a conditional breakpoint for construction of that very object and hoping that the issue is reproducible - simply right-click 'Go to Creation'.
If you catch an exception - instead of attempting to repeat the sequence of actions that caused it, but with the appropriate exception checkbox ticked - simply right-click 'Go to Creation'. If the error turns out to be a side effect of a deeper root cause - just keep nesting backward.
It's easy to get started; Just download and install, and there will be a menu inVisual Studio for starting the debugger, stepping back and so forth.
Tip: Stepping backwards can be a bit slow. It is often faster to step back out of the entire frame (default for C#:Alt-Shift-F11) and then step forward.
No license is required for non-commercial use of Rec Debugger. For commercial use and for additional features, considerRec Debugger Pro. More info atrecdebugger.com.
Revision Notes
- 0.9.66
Removed unintended breakpoint commit delay. - 0.9.65
Added support for CLR4.5.
Added support for Visual Studio 2012.
Added experimental support for Windows Store Apps.
Fixed a number of bugs. - 0.9.64
Fixed an issue with 'Go to last modification' of fields of structures that are elements of an array. - 0.9.63
Fixed an issue with doing virtual binds to non-virtual functions. Visual Basic Form apps would crash before even starting. - 0.9.62
Disabled commands while debugger is busy.
Fixed issue that could cause stack window to stop displaying. - 0.9.61
Fixed one compatibility issue.
Tweaked presentation of types and boxed primitives, and did some other minor stuff. - 0.9.60
Fixed a couple of compatibility issues and one potential crash bug. - 0.9.59
Fixed bind to __TransparentProxies.
Fixed a crash-bug.
Introduced Rec Debugger Pro.
Added evaluation expiration timer to Rec Debugger Pro features.
- 0.9.58
Fixed issue with intercept of methods on generic types.
Fixed sync-error with casting of dynamic types.
Implemented AppDomain.ResourceResolve.
Fixed issue with wstrcpy, which could affect StringBuilder.Replace.
Fixed issue with instantiation of GenericType<__Canon>.
Fixed stack 'overrun'.
Fixed issue with delegate constructor.
Fixed bind to COM-objects.
Fixed issue with breakpoint binding.
Misc. other stuff. - 0.9.57
Hopefully fixed (for real this time) an x86 crash bug - that was not actually fixed in v0.9.56.
Fixed a number of compatibility issues.
Fixed 'Go to last modification' of array elements. - 0.9.56
Fixed some issues with 'Open Recording'.
User code PDBs are now included in debug recordings.
Fixed crash bug (EDIT: Nope)
Fixed WebStartAction.None.
Added warning when source differs, added $exception regardless of frame, and other minor tweaks. - 0.9.55
Implemented 'Go to last modification' of local, static and thread-static variables.
Implemented 'Go to last modification' for native ints.
Fixed a sporadic internal NullReferenceException. - 0.9.54
On 'Go to creation' and 'Go to last modification', the 'causing' thread will now (normally) be selected. - 0.9.53
Fixed an internal StackOverflowException.
Fixed a sync error.
Fixed a TypeLoadException. - 0.9.52
Fixed static constructor deadlocks.
Improved reflection argument coercing. - 0.9.51
Implemented 'lazy shadow heap transfer' - giving a decent speed-up.
Fixed one execution bug and a couple of minor ones. - 0.9.50
Improved AppDomain setup.
Lowered video frame-rate to to 3fps for now. - 0.9.49
Fixed an execution bug and a sync error.
Fixed a video recorder bug (could cause crash depending on screen resolution). - 0.9.48
Fixed incorrect break on exceptions that would not reach user code.
Improved assembly resolution - for caching of generated code in particular.
Fixed issue where a still referenced object could become collected.
Fixed two unnecessary shadow heap transfers. - 0.9.47
Fixed a TypeAccessException.
Reduced memory overhead.
Moved the Rec menu to the right of the Debug menu.
Other minor stuff. - 0.9.46
Fixed crash-bug.
Fixed memory leak.
Fixed some other minor bugs. - 0.9.45
Fixed bug in video initialization routine.
Fixed two compatibility issues. - 0.9.44
Had missed to add 'Go to creation' and 'Go to last modification' to Watch and Autos.
Fixed one NotImplementedException.
Fixed issue with multiple Modules in single Assembly. - 0.9.43
Added form for prompting detected problems and for submitting error reports. - 0.9.42
* Fixed crash when CLR2 was not installed.
* Fixed issue with replayer that could cause it to crash.
* When COR_PROFILER_PATH cannot be used, CreateAndInject will now be used by default instead of RecCLRHost. CLR2 C++/CLI should now work, and CLR2 applications in general should work better.
* Fixed an issue with opening recordings that contain assemblies not marked as ILOnly.
* WorkingDirectory was not set.
* Added escaping to inspected strings. - 0.9.41
Reactivated code for improved C++/CLI entry point determination.
Fixed Rec Recorder crash when trying to record to a directory that does not exist.
Fixed launch of C++/CLI projects. (Note: VSIX installation will currently only handle CLR4 C++/CLI)
Fixed crash on aggressive assembly loading. Debugging ASP would in many cases fail. - 0.9.40
Fixed an issue where the entire debug host process would terminate on program completion.
Fixed an issue with dynamic module names that could cause stacks and disassembly not to display at all.
Re-added menu items 'Go to' last modification and creation, which were accidentally removed in v0.9.34. - 0.9.37-0.9.39
Finally managed to compile a 64 bit version of the video library.
Fixed some race conditions with video playback. - 0.9.36
VSIX installation now properly sets thread apartment state for non-CLR4 apps. - 0.9.35
Internal hooks are now added to KernelBase, not Kernel32, on Windows 7. Would cause launch to fail silently.
Added another pattern for HndCreateHandle (sigh). Possibly related to Windows 7 SP1.
Fixed an incorred check for ILOnly introduced in 0.9.34 (would always fail on everything but CLR4) - 0.9.34
Introduced Rec Recorder.
Added Load Symbols.
Fixed some issues with disassembly - one of which could even cause Visual Studio to hang.
Fixed some potential sync errors.
Fixed some other minor issues. - 0.9.33
Forgot an assembly in VSIX and new installer. Attempts to display the video tool window would be met with an error message. (Ahem) - 0.9.32
Implemented IDebugThread2.SetNextStatement as a temporal go-to, meaning that the little yellow arrow to the left of the codewindow now can be dragged to rewind and fast-forward. - 0.9.31
Removed dependency on Visual Studio 2008 (that would cause launch to fail silently).
Made a new installer using WiX. - 0.9.30
Uploaded to Visual Studio Gallery