Ernst, Michael DBurg, Brian2015-09-292015-09-292015-09-292015Burg_washington_0250E_14905.pdfhttp://hdl.handle.net/1773/33703Thesis (Ph.D.)--University of Washington, 2015The web is a widely-available open application platform, where anyone can freely inspect a live program's client-side source code and runtime state. Despite these platform advantages, understanding and debugging dynamic behavior in web programs is still very challenging. Several barriers stand in the way of understanding dynamic behaviors: reproducing complex interactions is often impossible; finding and comparing a behavior's runtime states is time-consuming; and the code that implements a behavior is scattered across multiple DOM, CSS, and JavaScript files. This dissertation demonstrates that these barriers can be addressed by new program understanding tools that rely on the ability to capture a program execution and revisit past program states within it. We show that when integrated as part of a browser engine, deterministic replay is fast, transparent, and pervasive; and these properties make it a suitable platform for such program understanding tools. This claim is substantiated by several novel interfaces for understanding dynamic behaviors. These prototypes exemplify three strategies for navigating through captured program executions: (1) by visualizing and seeking to input events---such as user interactions, network callbacks, and asynchronous tasks; (2) by retroactively logging program states and reverting execution back to log-producing statements; and (3) by working backwards from differences in visual output to the source code responsible for inducing output-affecting state changes. Some of these capabilities have been incorporated into the WebKit browser engine, demonstrating their practicality.application/pdfen-USCopyright is held by the individual authors.debugging; deterministic replay; web browserComputer sciencecomputer science and engineeringUnderstanding Dynamic Software Behavior with Tools for Retroactive InvestigationThesis