  Debugging is commonly understood as finding and fixing the cause of a
problem. But what does ``cause'' mean? How can we find causes? How can we prove
that a cause is a cause--or even ``the'' cause? This paper defines common terms
in debugging, highlights the principal techniques, their capabilities and
limitations.
