Debugging in 2012

The programs of 2012 are vastly different from the programs written in 90s and before. Yet the debugging techniques have not kept pace with time. The traditional debugger was invented in the 70s and hasn't changed fundamentally. The 'breakpoint model' of debugging no longer works with programs of 2012 which run on servers for long periods of time and are heavily multithreaded. This is evidenced by people resorting to the use of logging in code. Even logging is fundamentally broken because not only does it clutter your code, you are also trying to basically predict errors in advance. Since errors occur where you least expect them, the logging code is almost never in the right place. Logging also has this paradox that the more logging you add to your code, the tougher it is to debug because now you have a huge log file and it is very tough to gather signal from all the noise.

Chronon solves this problem. It records everything your Java program does and saves it a 'recording' file. The recording can be played back in our special 'Time Travelling Debugger'. The Time Travelling Debugger allows you to instantly jump to any point in the execution of your program and examine its entire state, including the entire heap and stacks of all the threads. You can also step through your code like a standard debugger. In fact, you can even step back! The fact that you don't need to wait to jump to a point in time makes it possible to easily debug the recording of a program even if it was running for days. Chronon also offers many views and filters for easily debugging programs that use multiple threads.

The Chronon debugger also comes with the groundbreaking 'Post Execution Logging' functionality. With Post Execution Logging, you can add logging to any part of your code after it has executed. Chronon will then 'play' all the log statements and allow you to see the output instantly, and as if the logging statements were actually present in the program when it was running. This means that you can completely get rid of all logging related clutter in your code.