Rivet is the first fully-featured, browser-agnostic remote debugger for web applications. Using Rivet, developers can inspect and modify the state of live web pages that are running inside unmodified end-user web browsers. This allows developers to explore real application bugs in the context of the actual machines on which those bugs occur. To make an application Rivet-aware, developers simply add the Rivet JavaScript library to the client-side portion of the application. Later, when a user detects a problem with the application, the user informs Rivet; in turn, Rivet pauses the application and notifies a remote debug server that a debuggable session is available. The server can launch an interactive debugger front-end for a human developer, or use Rivet's live patching mechanism to automatically install a fix on the client or run diagnostics for offline analysis. Experiments show that Rivet imposes negligible overhead during normal application operation. At debug time, Rivet's network footprint is small, and Rivet is computationally fast enough to support non-trivial diagnostics and live patches.
[1]
D. Flannanghan.
JavaScript: The definitive guide
,
1999
.
[2]
Jon Howell,et al.
Mugshot: Deterministic Capture and Replay for JavaScript Applications
,
2010,
NSDI.
[3]
James W. Mickens,et al.
Atlantis: robust, extensible execution environments for web applications
,
2011,
SOSP '11.
[4]
Robert Richards,et al.
Document Object Model (DOM)
,
2006
.
[5]
Galen C. Hunt,et al.
Debugging in the (very) large: ten years of implementation and experience
,
2009,
SOSP '09.
[6]
M. Frans Kaashoek,et al.
Ksplice: automatic rebootless kernel updates
,
2009,
EuroSys '09.
[7]
Rafael Dueire Lins,et al.
Garbage collection: algorithms for automatic dynamic memory management
,
1996
.
[8]
Steve Fulton,et al.
HTML5 Canvas
,
2011
.