Debugger interface is a very well stereotyped concept in
program development tools design. You usually do Step
Over, Step Into nested function calls, set
breakpoints and analyse the values of interesting
variables. But the growth of the hardware power and the
decrease of its cost made it possible to ease the
programmer burden of debugging her code. One of the most
ambitious debugger paradigms is the emulation of backward
execution. Here the programmer is allowed to rollback the
program state by execution of Back Step commands and
analyse the place where the bug occured in a single run.
Probably the most prominent of backstepping debuggers is Ocamldebug aimed at debugging
programs for Ocaml language.
The implementation of the backstepping debugger is a great
challenge, and surely we couldn't miss it.
Thanks to Microsoft
SSCLI initiative also known as Rotor we now have the
opportunity to enjoy hacking Microsoft for their
own money. Just kidding:)
There are two main challenges in this project. First is to cope with
an immense amount of code comprising .NET©
model. Secondly, we are living without fork system call for
doing checkpoints since anyway our primary target platform
is MS Windows©.
Also, though the project is far from being finished, we
have already employed several novel techniques making our
Janus debugger different from the conventional
implementations. To mention a few, our checkpointing
mechanism triggers minor garbage collection and turns off
major one, allowing for
phisical(!) disposal of short-time objects'
locations. Also, the checkpointing is triggered by the
debuggee program itself, which is an easy task when code is