Mugshot: deterministic capture and replay for Javascript applications

James W. Mickens, Jeremy Elson, Jon Howell · 2010

Mugshot is a system that captures every event in an ex-ecuting JavaScript program, allowing developers to de-terministically replay past executions of web applica-tions. Replay is useful for a variety of reasons: failure analysis using debugging tools, performance evaluation, and even usability analysis of a GUI. Because Mugshot can replay every execution step that led to a failure, it is far more useful for performing root-cause analysis than today’s commonly deployed client-based error reporting systems—core dumps and stack traces can only give de-velopers a snapshot of the system after a failure has oc-curred. Many logging systems require a specially instru-mented execution environment like a virtual machine or a custom program interpreter. In contrast, Mugshot’s client-side component is implemented entirely in stan-dard JavaScript, providing event capture on unmodified client browsers. Mugshot imposes low overhead in terms of storage (20-80KB/minute) and computation (slow-downs of about 7 % for games with high event rates). This combination of features—a low-overhead library that runs in unmodified browers—makes Mugshot one of the first capture systems that is practical to deploy to every client and run in the common case. With Mugshot, developers can collect widespread traces from programs in the field, gaining a visibility into application execution that is typically only available in a controlled develop-ment environment. 1

Read the paper · More papers on PaperTik