Jinx – A Debug Accelerator for Multithreaded Code

Jinx is a Visual Studio plugin designed to improve the debugging experience and test coverage for multithreaded software projects.  If you are a software developer or quality assurance engineer working on a project writing threaded code for multicore or SMP systems we think you will like Jinx.  The beta is free, and we are confident you will be impressed with how it can improve your debugging process, ease the mental strain of understanding bizarre concurrency errors, and help you produce a better product.

screenshot

What Jinx does

  • Jinx makes any latent synchronization errors in your code quickly turn into observable errors.  No longer can “hiesenbugs” lay dormant, waiting until the stars align and just the right scheduling of threads occurs before they manifest themselves.  Jinx makes your programs unlucky, so that those rare thread schedules that do show up bugs, happen all the time (hence the name “Jinx”).   More details on how it does this are here, but the basic approach is that Jinx carefully orchestrates how threads in your application are scheduled such that shared memory interactions are more aggressively tested.  Moreover, under the hood, Jinx simultaneously explores several different thread schedules, and chooses those that are most likely to expose software bugs.
  • Jinx helps you understand how threads are communicating when a program error occurs.  When a program crash is detected Jinx will not only stop the crashing thread at the problematic source code line (as all debugging tools will do), but it stops all other threads in your application at the last shared memory communication point that is semantically meaningful for that crash (as no other debugging tool can do).  We call this ability SmartStop.  One of the hardest challenges with debugging parallel code is that you often only see one side of the problem.  You know which thread detected incorrect program state or wandered off on a bad pointer.  But you don’t see which thread actually corrupted program state or wrote that bad pointer value to begin with.  SmartStop lets you see this thread at that exact point.  More details on SmartStop are available here.

Jinx works with your existing tools


Whether you use Visual Studio, Parallel Studio, gdb or any other debug infrastructure, Jinx is compatible with it.  The Jinx control application can plugin to Visual Studio or run standalone.  Jinx does not care which language you use and has been tested with C, C++, C# and Java.  Jinx also does not care which synchronization library you use, and works equally well with the native Win32, boost, MFC, and pthread libraries.  Jinx will even work with your own custom synchronization primitives and lock free data structures.  If there’s a deadlock, race condition or atomicity violation in your code, Jinx will ferret it out for you.

Free beta available for interested software professionals

Additional details on how Jinx works can be found here.  However, we encourage you to view the online demo.  Seeing Jinx work is much easier than explaining how Jinx works.  Moreover, after several months in alpha testing we are about to enter into a beta release cycle.  We are currently taking applications for beta testers and if you write parallel software on the Windows Vista or Windows 7 platform, we’d very much like you to participate.