Designed for Java
Start from an overview and drill down into the details.
BugJail is designed from the ground up for Java. It has an entirely different workflow than normal debugger (which was designed for assembler in 1972). You'll see all method calls simultaneously and can drill down into call trees where needed, inspect argument and return values (including arrays and complex objects) or drop down to source-level debugging.
A Database of
Don't step through code. Get direct answers.
Instead of pausing execution at a single point, BugJail captures the entire execution to database. It has a relational model of how your program executed and "knows" direct answers to many of your questions. For example, it knows the writer of every field value, so if a test fails because the actual value was not as expected, you can click and jump back to the exact debug time (and source line) that wrote the wrong value.
Move time with a slider, like in a music player.
A common debugging use case is to find what the value of a field is at a certain time, and how it changes over time. BugJail has the history of every field write so instead of stepping through code, you can freely set the inspected debug time, or move a slider around and see interactively how an entire object graph evolves through time.
Point and click to navigate through time and source. Works backwards too.
Just click with your mouse where you want to navigate, including backwards in time. And if you are debugging a loop, you don't need to guess ahead-of-time in which iterations to step into. Instead, you can pick after-the-fact, based on results of all the iterations (from a list that shows arguments, return values, exceptions etc).
How BugJail Works?
Start your program, app server or test cases with
1 extra Java command-line option.
The program executes just as usual, except in the background
BugJail captures every method call and field write, up to
20,000,000 events per second.
BugJail then uses the captured events to reconstruct what happened as a
nanosecond precision relational model, basically giving you a
Database of program execution.
Questions. And Answers.
What platforms and languages are supported?
BugJail is currently available only for JVM (all versions from 1.6 through to 13). Currently, the source-level debugging feature works only with Java, while all other features should work with any JVM language.
What is the performance impact of BugJail?
Program startup slows down by a fixed ~0.5 sec when BugJail's capturing agent is initialized, and then the rest of the program startup time has a proportional overhead of around 60-90% when the capturing agent instruments classes while they are being loaded.
Program execution itself doesn't usually slow down noticeably (~5%) if you have typical IO-bound web, enterprise or business application. BugJail is also fast enough to capture from CPU-bound programs, such as AI algorithms and compilers. For CPU-bound programs, the performance impact is typically in 100-300% range - significant but still certainly usable.
Does BugJail send my source code to the Cloud?
No. BugJail is a desktop application. Nothing about your project, source code or bytecode is sent to the Cloud.
Is there any risk to my production environment?
No. BugJail is purely development time tool. It simply doesn't touch the production environment in any way.
Can I use BugJail in pre-production or production environment if I really, really want?
No. BugJail just isn't currently suitable for this, and use elsewhere other than developer's workstation is explicitly prohibited both by the license terms and by technical restrictions (the capturing agent can only connect to localhost).
We are steadily working on making BugJail suitable for pre-production and production use, but this will be a separate edition with different licensing, and it's likely to be several years away.
Do I need to modify source code?
No. To capture program execution to BugJail, the only thing you need to do is start the Java Virtual Machine with one additional option.
Isn't BugJail just a reverse debugger?
No. While BugJail does have similarities with reverse debuggers it is actually quite different:
- Functionally: BugJail is focused on high-level execution flow, finding bugs related to program state, and solving real-world debugging tasks such as 'who wrote this value', while reverse debuggers are focused on adding 'step backwards' button to the normal 1970s vintage debugger, which in turn is focused only on low-level execution flow.
- Technically: BugJail captures program execution in a different way and with 10-100x lower performance impact than any* reverse debugger. BugJail also reconstructs the captured program execution to a relational model and a proper database, which makes it particularly well suited for complex analysis, while all* reverse debuggers use fairly flat data structure, better suited for stepping than analysing.
- *) All reverse debuggers that we've ever come across. If you think we've missed something, please get in touch!