Program analysis tools are
starting to change how real software is developed: verifiers can now
eliminate certain complex bugs, and automatic refactoring tools can
greatly simplify code cleanup. Nevertheless, writing robust large-scale
software remains a challenge, as greater use of component frameworks
complicates debugging and program understanding. Developers need more
powerful programming tools to combat this complexity and produce
reliable code.
This talk will present two
techniques---refinement-based pointer analysis and thin slicing---that
enable powerful new tools for debugging and understanding large-scale
software. Our refinement-based pointer analysis is the first to compute
precise answers in interactive time, allowing tools to handle previously
inscrutable program behaviors interactively. Thin slicing is the first
technique to give usable answers to code relevance questions---e.g.,
"What code might have caused this crash?"---a long-standing challenge
for analysis tools. I will conclude by describing new tools enabled by
the two techniques.