views:

97

answers:

2

PetraVM recently came out with a Beta release of their Jinx product. Has anyone checked it out yet? Any feedback?

By good, I mean:

1) easy to use 2) intuitive 3) useful 4) doesn't take a lot of code to integrate

... those kinds of things.

Thanks guys!

+1  A: 

After literally stumbling across Jinx while poking around on Google, I have been on the beta and pre-beta tests with a fair amount of usage already under my belt. As with any beta related comments please understand that things may change or already have changed, so do keep this in mind and take the following with a grain of salt.

So, going through the list of questions one by one:

1) Install and go. Jinx adds a control panel to Visual Studio which you can mostly ignore as the defaults are typically good for most cases. Otherwise you just work normally and forget about it. Jinx does not instrument your code, require any additional libraries linked in or the numerous other things some tools require.

2) The question of "intuitive" is really up to the user. If you understand threaded code and the sorts of bugs possible, Jinx just makes those bugs happen much more frequently, which by itself is a huge benefit to people doing threaded code. While Jinx attempts to stop the code in a state that makes the problem as obvious as possible, "obvious" and "intuitive" are really up to the skill of the programmer.

3) Useful? Anyone who has done threaded code before knows that a race condition can happen regularly or once every month based on cosmic ray counts, that randomness makes debugging threaded code very difficult. With Jinx, even the most minor race condition can be reproduced usually on the first run consistently. This works even for lockless code that other static analysis or instrumenting tools would generally miss.

This sort of quick reproduction of problems is amazingly useful.  Jinx has helped me track down a "one instruction in the wrong place" sort of bug that would actually hit once a week at most.  Jinx forced the crash to happen almost immediately and allowed me to focus on the actual cause of the bug instead being completely in the dark as to the real source.

4) Integration with Jinx is a breeze. If you don't mind your machine becoming a bit slow, you can tell Jinx to watch the entire machine. It slows the machine down as it is actually watching everything on the machine, including the OS. While interresting and useful if your software consists of multiple processes on the same machine, this is not suggested as it can become painful to work with the machine.

Instead of using the global system, adding an include and two lines of code does the primary work needed of registering the process with Jinx such that Jinx can watch just the registered items.  You can help Jinx by using the Jinx specific asserts and registering regions of code that are more important.  In the case of the crash mentioned above though, I didn't have to do any of that and Jinx found the problem without the additional integration work.  In any case, the integration is extremely simple.


After using Jinx for the last couple months, I have to say that overall it has been a great pleasure.  I won't write new threaded code without Jinx running in the background anymore simply because it does its intended job of forcing obscure threading issues to be immediate assert/crashes.  As mentioned, things that you could go weeks without seeing become problems almost immediately, this is a wonderful thing to have during initial test and implementation.

KRB

KRB
+1  A: 

BTW, PetraVM has changed its name to Corensic and you can find Jinx Beta 2 over at www.corensic.com.

--Prashant, the marketing guy at Corensic

Prashant at Corensic
A lot of the images on the corensic.com website are pixelated. Looks bad!
Brian T Hannan