Engineering Chronon

All the technical and design details on Chronon - The DVR for Java

Chronon 2.0 fixes everything wrong with Logging

Lets get this straight. Currently the only real way to debug long running, server side applications, is by looking at log files. Yet, logging in its current form is fundamentally broken.

What's wrong with logging currently?

The paradox of logging:

  1. You put a logging statement at a piece of code where you 'think' might be a bug.
  2. Because you already thought about the bug at that place, you already hardened the code there.
  3. In real life, errors happen where you least expected them to
  4. Thus, what really happens is, you never end up putting a log statement where the error actually ends up occurring.

Apart from the above paradox which occurs due to the fact that you are basically trying to predict errors in advance, logging has other evils:

  • It clutters up your code and hides actual logic.
  • Its a huge distraction from actual coding.
  • Log levels  - Not only do you need to think of the log statements, but also the 'level' of logging. Talk about predicting errors, this practically needs you to be Nostradamus.....
  • Also it is just real fun to figure out a bug from a long running server which has a ginormous log file.

Whats good then?

That said, there is something good about logging after all.

If in the miraculous case, you do get your log statements positioned exactly right, looking at a log file can give you a quick overview of the execution of your program.

Chronon 2.0 and Post Execution Logging

With Chronon 2.0, we are reinventing logging, just like we reinvented the debugger only a few months ago.

The Post Execution Logging functionality in Chronon 2.0 allows you to add logging to a program after it has executed.

Yes, you read that right. You can actually add logging after your code's execution! 

Not only that:

  • You can access all your variables (just like in regular logging statements)
  • You will the results of the log execution instantly without having to wait for the program to rexecute fully!
  • In true Chronon fashion, clicking on a line of log output will take you directly to the point in time when that statement was output, so you can see the entire state of your program and use the step back functionality to find the root cause of your issue.

That also means you can finally get rid of all those logging statements in your program that are cluttering up your code and focus only on developing your software.

If all this still sounds crazy to you, see the video below to see Post Execution Logging in action.

Read more details on Post Execution logging.

Evaluation Expired?

Btw, if your Chronon 1.0 evaluation has expired and you still want to try out Chronon 2.0, just go ahead and download it and you will get another 30 days of free trial!


Filed under  //   

Support for Dynamic Proxy classes

We have now added full support for Dynamic Proxy object in todays release (Chronon 1.8.8).

Recorder Support

Chronon will now instrument any Dynamic Proxy class that implements any interface that is 'included' in your Recorder Configuration.

Time Travelling Debugger Support

The Time Travelling Debugger knows about Proxy classes and will allow stepping inside any call made on a proxy object.

  • Stepping In will take you directly to the 'Invocation Handler' call corresponding to the Dynamic Proxy class.
  • Stepping Out works likewise and Stepping Out from an 'Invocation Handler' of a Proxy class will direcly take you to the call site of the original method called on that Proxy.

Chronon Recording Server Support

The Recording Server will now correctly identify the relevant Dynamic Proxy classes to instrument during a dynamic Start/Stop.

In order to get the Dynamic Proxy support in your Recording Server installation, you only need to update the 'recorder.jar' file for all applications, which can be found in the Standalone Recorder Pack on the downloads page.

Filed under  //   

Chronon 1.8.7 and release mishaps

Today we had a bit of a mishap with the 1.8.0 release.

Mishap Details

Soon after we released 1.8.0, we discovered a fix for a longstanding bug in the Recorder which would throw exceptions while instrumentation.

Since we like to get features and bugfixes out as soon as possible to our users,  we immediately updated the Recorder and Eclipse plugin to 1.8.5.  We even starting sending out mails to some evaluators to update their Eclipse plugins or Recording Server installations to 1.8.5.

However, as we were doing so, somebody found a bug in the new 1.8.5 release! Apparently the fix we had put in introduced another bug which caused local variable assignments to be not recorded!

But all is good now :)

So here we are now, everything is finally fixed and we have updated the version to 1.8.7. This should solve both the exception issue and the issue with local variables not being recorded.

  1. Please update your eclipse plugins. 
  2. If you are using the Chronon Recording Server version 1.7 or higher, you just need to download the Standalone Recorder pack and update your recorder.jar file to get the fix.
    If you have a version of the Recording Server < 1.7, contact us to get the latest binaries. 

Sorry for all the confusion and next time we wont be so hasty in putting out a bugfix which we haven't thoroughly tested :)


Filed under  //   

Chronon 1.8 released

Another week, another release!

This time we have a bunch of productivity boosing features our users have been asking for:

Keyboard Shortcuts

Yes, they are finally here! There is now a keyboard shortcut for almost every operation in Chronon. Its amazing how fast debugging is with these! 


Look at the documentation for the key mapping for all the keyboard shortcuts.

Solaris support

For all the Solaris fans, Chronon is now officially supported on Solaris x86 and 864 (32 bit and 64 bit) platforms!
Native agent binaries are available with the Chronon Eclipse plugin and the Standalone Recorder download pack.

Double click to jump

In views like Exceptions View, Threads View, Current Line view, you can just double click on the appropriate exception, thread,  method to jump directly to it. No need to click the 'step to' button. More productivity boost!

Faster Stack View

The Stack view now uses caching and is much, much faster. Along with the keyboard shortcuts for stepping, you will find using Chronon blazingly fast!

Recorder bugfixes

We fixed some bugs with the Recorder. If you are using the Chronon Recording Server 1.7 or higher, you can download the Standalone Recorder pack and use the recorder jar from there to get the bugfixes in your Recording Server installation.


Evaluation expired??

If your Chronon evaluation has expired, but you still want to try out these awesome features, contact and we will provide you with an extended evaluation!

So go ahead and Download now!

While you are at it, don't forget to check out the Chronon Recording Server


Filed under  //   

Chronon Recording Server 1.7

Today we are updating the Chronon Recording Server to 1.7.

Apart from the obvious download related bug fix, this release contains 2 new features:

1. Active Heap Info


Now you can see the heap size of the application you are recording. 
Note that for performance reasons, the heap size is updated only every 5 seconds.

2. Better Recorder Start/Stop Progress Info


Now when you start/stop the recorder on your application:

  1. The progress bar is more accurate
  2. You can see exactly which class is being instrumented 


Since this release required changes to the communication protocol, if you are upgrading your existing Recording Server installation, you will need to update all 3 components : recorder, controller and recordingserver.war

If you arent already using the Chronon Recording Server, go get it now!


Filed under  //     

Chronon 1.6 released

The major theme of this release is improving the workflow of downloading a file from the Chronon Recording Server and opening it in Eclipse.

There are two major features to that purpose:

Open .tar file directly

The 'Open Recording' dialog now allows you to point direcly to a .tar file.
It will automatically do the job of extracting the .tar file and unpacking it.


No longer do you have to manually extract the .tar file and create folders to extract and unpack them. 

Specify Source Lookup paths

This has been a big request for some time.

A lot of times you have multiple projects in a workspace which have the same package and class names.
When you open an external recording you want to tell Chronon which specific project to look into to find the correct class when debugging the recording.


To that end, the 'Open Recording' dialog now allows you to create 'Source Lookup' definitions.
Creating and selecting a Source Lookup definition while opening an external recording instruct the Chronon Eclipse plugin to look only inside the projects you specify for displaying source code.


You can read more about these features in our documentation.

So go ahead and upgrade your Chronon installation!



Filed under  //   

Chronon release 1.2

It has barely been a week since we released update 1.1.1 and we are back again with another update full of more goodies.

Support for Reflection in the recorder

The Chronon recorder will now recognize updates to the fields of your object done using the Java Reflection APIs.
This is especially useful if you use ORM frameworks like Hibernate which use reflection to set the fields of the Java objects. No longer will you see 'null' in those fields, but the actual values.

'Copy Value' for variables in the Debugger


If the value of a variable has a string that is too large to fit in the eclipse view, you can right-click and select 'Copy Value' to copy a fully formatted version of the string to clipboard.
This functionality is supported for all views that show the value of a variable, ie theLocals view, Variable History view and Current Line view.

And of course, lots more bugfixes in the recorder and debugger. If you were running into deadlocks while recording before, you shouldnt anymore.

So go ahead and update your Chronon installation!

Filed under  //     

Chronon release 1.1.1

This update brings a ton of improvements. I will list some of the major ones here:

Support for applications with huge number of threads

Until now, you could create only 1024 different threads in your application, after which Chronon would throw an exception.
With this release, if your application is going to create more threads, you can specify that in the recorder config file, eg

maxrecordedthreads = 3000

Of course, you can set this option from within Eclipse too.


Note that the number of threads here does not mean 'the number of threads active at a certain point in time'. It means 'the total number of threads created during the lifetime of your application'. So if your application frequently creates and destroys new threads instead of using a thread pool, this might be useful to you.

Much faster stack traces in the Stack view

The stack view can now create stack traces much faster and wont crash if the stack trace at a point is extremely deep.

Recorder no longer deadlocks during shutdown

This was a problem for some people who had redirected System.out to a custom Logging class, which they were also recording. This would cause a deadlock in the recorder. No more. Now we print out shutting down messages in a different thread. Since during shutdown, Chronon locks up the rest of the threads while it is persisting data, it is possible if you have System.out redirected to a custom Logging class, for the printer thread to be locked while the persistance is taking place, but that only means the messages to the console will appear a bit delayed. The recorder will still complete and in the same amount of time as before, but it wont deadlock.

We recommend everyone to update their Chronon installation.

Filed under  //     

Chronon bugfix update

We have updated Chronon with some bugfixes related to recording JEE servers from within Eclipse.
If you were seeing an exception when trying to Record a server, you shouldnt see it anymore.

Everyone please update using the update instructions here.


Filed under  //     

Beta update 4

Since we are running a few days behind on our release schedule, I updated the beta build with one that expires on April 21.

This update contains a ton of bugfixes. Stack view is much faster now, and shouldnt lag when there are lots of threads at a point in time.
Also errors related to 'method too large' to instrument are now gone. We just skip over and exclude methods that are too large.

I advice everyone to upgrade.

Filed under  //