State-of-the-art dynamic bug detectors such as data race and memory leak detectors report program locations that are likely causes of bugs. However, programmers need more than static program locations to understand the behavior of increasingly complex and concurrent software. Dynamic calling context provides additional information, but it is expensive to record calling context frequently, e.g., at every read and write. Context-sensitive dynamic analyses can build and maintain a calling context tree (CCT) to track calling context-but in order to reuse existing nodes, CCT-based approaches require an expensive lookup. This thesis introduces a new approach for context sensitivity that avoids this expensive lookup. The approach uses a new data structure called the calling context I would like to start by giving my deepest gratitude to my advisor Mike Bond, who has spent a tremendous amount of time and energy trying to train me into a good researcher. Since Jan 2011, I have been happy working with him and he has taught me a lot not only about technical skills but also the way to work efficiently. His unwavering patience and confidence in me have been a constant source of encouragement that helped me overcome numerous challenges and difficulties, and keep making my project as perfect as possible. During these past 3 years, I have acquired more technical skills and confidence with his guidance. Especially when I started working with him, he gave a lot of thoughtful suggestions about course training, research and personal growth.