-
Notifications
You must be signed in to change notification settings - Fork 0
/
2_related.tex
9 lines (5 loc) · 2.77 KB
/
2_related.tex
1
2
3
4
5
6
7
8
\section{Debugging Distributed Systems}
\label{sec:related}
Interactive debugging of parallel and distributed systems has been discussed as early as 1981~\cite{schiffenbauer1981interactive}, but the idea has never been fully realized, mainly because it is very hard to do. However, there are many non interactive tools aid developers in debugging distributed applications. A comprehensive survey of the types of methods available can be found in Beschastnikh et al.~\cite{shiviz}. In this survey, existing methods are grouped into seven categories: testing, model checking, theorem proving, record and replay, tracing, log analysis, and visualization. Each of these types of tools offers different insights for the developer to find bugs in the application. Tools for record and replay~\cite{recordreplay, d3s, friday}, tracing~\cite{tracing, tracing2}, log analysis~\cite{loganalysis}, and visualizers~\cite{shiviz}, try to parse the artifacts of execution such as logs, execution stack traces, and data traces to understand the change of state in a run of the distributed system.
Many of these tools share features with interactive debuggers, as they share the common goal of exposing errors in the system to the developers. For example, tools like ShiViz~\cite{shiviz} provide developers a way to observe the information exchanged in a distributed system by parsing logs, inferring causal relations between messages in them, and then visualizing them. Similarly, interactive debuggers for distributed systems would also need to provide a way to visualize the information being exchanged. The $\text{D}^{3}\text{S}$~\cite{d3s} tool allows programmers to define predicates that, when matched during execution, parse the execution trace to determine the source of the state changes. In interactive debugging these predicates are known as breakpoints and are the fundamental concept in interactive debugging.
Recently, a graphical, interactive debugger for distributed systems called Oddity~\cite{oddity} was presented. Using Oddity, programmers can observe communication in distributed systems. They can perturb these communications, exploring conditions of failure, reordered messages, duplicate messages etc. Oddity also supports the ability to explore several branching executions without restarting the application. Oddity highlights communication. Events are communicated, and consumed at the control of the programmer via a central Oddity component. However, the tool does not seem to capture the change of state within the node, it only captures the communication. Without exposing the change of state within the node due to these communications, the picture is incomplete. With this tool, we can observe if the wrong messages are being sent, but we cannot observe if a correct message is processed at a node in the wrong way.