An architecture that supports the instrumentation of software to generate
structured information about its operation. A library of methods and data
structure definitions is provided to a developer of a piece of software.
The developer includes calls to the methods in order to signal the fact
that a given event has occurred. The developer may also cause the program
to provide information descriptive of the event by populating data
structures defined in the library. The library methods may also
contribute to the population of these data structures. In a distributed
computing environment in which tasks are performed through a series of
calls to remote computers, "per-task" tracing may be performed by sending
trace instructions to the remote computers along with the remote calls.