1. A computer-implemented method of providing a program state of an application, the method comprising: receiving a state request for the program state of the application at an individual execution point of the application, wherein the application is a multi-threaded server application; synchronizing the application and a state discovery process executed by a server at the individual execution point of the application and setting the application to an unchanging status; identifying root objects of the application from an object hierarchy specifying object relationships within the application; traversing a root object hierarchy of each root object to discover a state of an identified root object and each related object of the identified object at the individual execution point of the application, the root object hierarchy of an identified root object comprising the identified root object and each related object of the identified root object, wherein traversing each root object hierarchy of the object hierarchy produces state discovery results including data types and values for each object of the object hierarchy; determining output semantics for each object of the object hierarchy based on the state discovery results; generating a state description of the application at the individual execution point based on the state discovery results and the output semantics; releasing the application from the unchanging status after generating the state description of the application at the individual execution point; and outputting the state description of the application at the individual execution point to a computing device.