Data Race Detector (DRD) is a tool for dynamic detection of data races in Java programs, implemented as a java agent. DRD works in same JVM with the target application and dynamically detects occuring and possible races. Results are logged to files, for each race additional information is printed: class+method+line number for both accesses, race type, at least one stacktrace.
How to use
Open config.xml. Find RaceDetection section and assure that rules inside it cover exactly your application and nothing more. Usually it's enough to have one rule based on unique prefix of your application packages. Also check that SyncInterception section is empty and defaultPolicy is "*":
Open drd.properties. Set "drd.config.dir" and "drd.log.dir" properties:
Locate exact place where java (javaw, ...) is actually executed to launch your application. Add DRD java agent and settings to launch parameters the following (note, prepend):
That's it! If everything is fine, your application would start normally (most likely it work slower that usual). DRD results would be logged into three files in specified log directory.