The RoadRunner Dynamic Analysis Framework for Concurrent Programs
1 Concurrency defects: (1) race conditions, (2) deadlocks, (3) violations of desired atomicity, (4) violations of determinism properties. Event is operation of interest: accessing memory, acquiring a lock, forking a new thread, etc. RoadRunner is written entirely in Java, with no modifications to the underlying JVM. It adds instrumentation code to the target program's bytecode at load time. Writing back-end only requires defining methods to handle various events of interest.
2 Tools can be composed into a tool chain. Oh! They implement with tool chain: ThreadLocal, ReadOnly, and LockSet. They said their HappensBefore is slow and filters like ThreadOnly and ReadOnly can significantly improve it. RoadRunner has pipe-and-filter architecture. 3 It has ShadowThread object for each Thread JVM object. And ShadowLock. Decoration class contains user-defined fields for tool-specific information associated with threads and locks. And ShadowVar—shadow location for each memory location. For each memory access access method is called. I think it is too slow, should be faster.4 They have single shadow location for each memory location for all tools in tool chain.
5 Instrumentator works at classes loading and is build using ASM. 6 It has shadow for fields, replaces all gets and sets by own methods, has shadow arrays for arrays. Optimizations lies on JIT's aggressive inlining. They use . They compare themselves with SOOT, Sofya (has its own JVM), CalFuzzer, ( built on top of ATOM), and .
Seems like it is very slow but easy-to-use.
Sergey Vartanov, 2007–2020