Jinx Debugger

Jinx was a concurrency debugger that deterministically controlled the interleaving of workloads across processor cores, focusing on shared memory interactions.

Using this deterministic approach, Jinx aimed to increase the frequency of occurrence of elusive shared memory bugs, sometimes called Heisenbugs.

[1] Jinx worked by dynamically building a set of potential interleavings (i.e. alternate eventualities, or execution scenarios, that will occur under some future condition) that are most likely to result in concurrency faults, and quickly tested those execution paths to surface concurrency problems such as deadlocks, race conditions and atomicity violations that are found in multiprocessing applications.

Unlike dynamic and static code analysis methods, Jinx was notable in that it produced no false positives (spurious bug reports).

Jinx was implemented as a hypervisor, giving it the ability to observe the effects of all elements of the software environment on thread interleaving.