A server application discovers its relevant data objects and generates a
report of the current states of such objects at a moment in time that is
relevant to a detected failure. Responsive to a request for a server
application state, the application can identify root objects; discover
data types, values, and related objects through recursive traversal and
analysis of the object hierarchies; and generate a state description of
the application for review and analysis by others. The state discovery
may be synchronized among multiple threads to ensure that the state
description represents a snapshot of the server application state and a
single point in its execution. The state description can be analyzed by
validation tools to detect where the error might exist in the application
and how the error might be corrected.