Nobody would claim that debugging computer software is easy: all too
often it proceeds by trial-and-error experiments in which programmers
examine the behaviour of the system and form hypotheses that could
explain what they see. These problems are exacerbated when developing
distributed, peer-to-peer or multi-processor applications, or when
unreliable network links form part of the system under test.
Environments for 'pervasive computing' -- such as the Xenoservers
project -- take this to an extreme, allowing user-supplied code to run
or migrate within and around the network.
In this talk I'll be describing some work we've been doing on how to
perform 'pervasive debugging', enabling complex multi-process
applications to be debugged and controlled as single entities and
their robustness to changes in network performance to be evaluated.
We do this by virtualizing the resources used by the system, allowing
the threads that it involves and the network links that it uses to be
modelled within a single controllable process.