The document describes a technique called Falcon for fault localization in concurrent programs. Falcon uses patterns of variable accesses and thread interactions to identify suspicious patterns. It records patterns dynamically from multiple program executions. It then computes the suspiciousness of each pattern based on whether the pattern appears in passing or failing runs. The most suspicious patterns that appear frequently in failing runs but not passing runs help locate likely faults. The technique is evaluated on concurrency violations like order violations and atomicity violations.