1 Introduction
Debugging is one of the fundamental tools for identifying
software defects (“bugs”). Debugging is particularly relevant
in wireless sensor networks (WSNs), as these are susceptible
to unpredictable runtime conditions. Indeed, programmers
of WSNs use tools such as simulators [6, 2], safe code enforcement
[1], and formal testing [4] prior to deployment of
an application in the field, yet exhaustive testing of all conditions
in the lab is infeasible, because WSNs are deployed
in austere environments whose behavior cannot be easily
duplicated in a laboratory.
Debugging is often performed in a cyclic process of repeatedly
executing a program and tracking down bugs. In
WSNs, cyclic debugging can be lengthy and laborious. For
example, nodes are often not easily physically accessible,
meaning that the programmer must rely on low-power wireless
links to painstakingly collect any data of interest. Also,
there may not be enough information available to immediately
diagnose a bug, so the network must be wirelessly reprogrammed
with code to collect additional debugging data.
This can take minutes, and waiting for the bug to resurface
may also take some time.