The invention builds a structure of software objects that captures the
historically contingent development of an asynchronous program. The
invention builds software objects that represent the resources and
subtasks that make up the asynchronous program. The objects are connected
into a hierarchy whose structure explicates interactions among the
resources and subtasks. When a fault is detected, the structure tells the
debugger everything the program was doing at the time of the fault and
lays open the developmental history of the program that led to the fault.
The debugger uses this information to trace the detected fault back
through code and time to its origin. When a new feature is added, the
structure tells maintenance personnel how the new feature affects
existing functions. Within the structure, the invention provides
mechanisms for handling reference counters and software locks. Groups of
resources can be handled together, the structure taking care of
coordination.