Abstract
This paper discusses the use of “relative debugging” as a technique for locating
errors in a program that has been ported or developed using evolutionary
software engineering techniques. It works on the premise that it is possible to
find errors by comparing the contents of key data structures at run time between
a “working” version and the new code. Previously, our reference implementation
of relative debugging, called Guard, only supported comparison of regular data
structures like scalars, simple structures and arrays. Recently, we augmented
Guard enabling it to compare dynamically allocated structures like linked lists.
Such comparisons are complex because the raw values of pointers cannot be
compared directly. Here we describe the changes that were required to support
dynamic data types. The functionality is illustrated in a small case study, in
which a parallel particle code behaves differently as the number of processors
is altered.