Relative debugging is a technique that allows a user to compare data between two executing programs. It was devised to aid the testing and debugging of programs that are either modified in some way, or are ported to other computer platforms. It is effectively a hybrid test & debug methodology.

The challenge a relative debugger can assist with is what to do you do when you move your application to another node of the Grid and it stops working? Subtle errors can be introduced through changes:

  • By programmer
  • In the environment (e.g. DLL Hell)

Programmer must understand application intimately to be able to locate source of errors. Programmer can spend much time tracing program state to locate source of error and understanding how code changes may have resulted in errors. Relative debugging is about automating this process.

Whilst traditional debuggers force the programmer to understand the expected state and internal operation of a program, relative debugging makes it possible to trace errors by comparing the contents of data structures between programs at run time. In this way, the programmer is less concerned with the actual state of the program, and more concerned with finding when and where differences between the old and new codes occur. The methodology requires users to start by observing that two programs generate different results, and then iteratively moving back through the data flow of the codes to determine the point at which they start producing different answers.

We have developed a relative debugger called Guard. Guard supports the execution of both sequential and parallel programs on a range of platforms, and exists for a number of different development environments. Guard can be applied to both sequential and parallel programs.

This project is supported by: