Continuation equivalence: a correctness criterion for static optimizations of dynamic analyses
Proceedings of the Ninth International Workshop on Dynamic Analysis
Combining static analysis and runtime checking in security aspects for distributed tuple spaces
COORDINATION'11 Proceedings of the 13th international conference on Coordination models and languages
DiSL: a domain-specific language for bytecode instrumentation
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
JaDaRD: java data-race detector
Proceedings of the 3rd annual conference on Systems, programming, and applications: software for humanity
Challenges in defining a programming language for provably correct dynamic analyses
ISoLA'12 Proceedings of the 5th international conference on Leveraging Applications of Formal Methods, Verification and Validation: technologies for mastering change - Volume Part I
Comparison of instrumentation techniques for dynamic program analysis on the Java virtual machine
Proceedings of the 12th annual international conference companion on Aspect-oriented software development
ShadowData: shadowing heap objects in Java
Proceedings of the 11th ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering
Dynamic optimization of bytecode instrumentation
Proceedings of the 7th ACM workshop on Virtual machines and intermediate languages
Hi-index | 0.00 |
In the past, researchers have developed specialized programs to aid programmers in detecting concurrent programming errors such as deadlocks, livelocks, starvation, and data races. In this work, we propose a language extension to the aspect-oriented programming language AspectJ, in the form of three new pointcuts, lock(), unlock(), and maybeShared(). These pointcuts allow programmers to monitor program events where locks are granted or handed back, and where values are accessed that may be shared among multiple Java threads. We decide thread locality using a static thread-local-objects analysis developed by others. Using the three new primitive pointcuts, researchers can directly implement efficient monitoring algorithms to detect concurrent-programming errors online. As an example, we describe a new algorithm which we call Racer, an adaption of the well-known Eraser algorithm to the memory model of Java. We implemented the new pointcuts as an extension to the AspectBench Compiler, implemented the Racer algorithm using this language extension, and then applied the algorithm to the NASA K9 Rover Executive and two smaller programs. Our experiments demonstrate that our implementation is effective in finding subtle data races. In the Rover Executive, Racer finds 12 data races, with no false warnings. Only one of these races was previously known.