1. A computer implemented method of debugging a software system, the software system comprising software components, the method comprising: enforcing each of the software components to use a common framework for storing execution states; storing execution states of the software system in a first format, wherein each of the execution states corresponds to one of the software components at a corresponding time instance, wherein the common framework is designed to store the execution states in the first format, the first format including a first field identifying the specific one of the software components storing a corresponding execution state, wherein the common framework stores the execution states in a plurality of log files, each log file corresponding to a software component; receiving, from a user, an indication to debug the software system, wherein the indication specifies a time instance; determining the occurrence of a first error in the software system by inspecting at least one of the stored execution states corresponding to time instances prior to the time instance, wherein the first error is determined based on the stored execution states of at least two different software components, wherein the determining comprises: generating a set of execution characteristics corresponding to each of the plurality of time instances based on the plurality of execution states; storing the set of execution characteristics for each of the plurality of time instances in a database; and querying the set of execution characteristics maintained in the database to determine the occurrence of the first error in the software system, wherein the generating further comprises: parsing each of the execution states stored in the first format to identify corresponding values for a set of fields, wherein the parsing comprises using a common parser to parse all of the plurality of log files to determine the set of execution characteristics of the software system; and creating a first subset of execution characteristics based on the values for the set of fields identified for an execution state, wherein the first subset of execution characteristics is contained in the set of execution characteristics for a corresponding time instance; maintaining a knowledge base specifying a plurality of sets of recommendations for a corresponding set of errors, wherein the set of errors includes the first error; identifying a first set of recommendations for fixing the first error, wherein the identifying further comprises: searching, after the determining the first error, the knowledge base for recommendations for the first error; and finding the first set of recommendations in the plurality of sets of recommendations corresponding to the first error; and providing, to the user, the first error and the first set of recommendations to enable the user to debug the software system, wherein the determining, the identifying and the providing are performed in response to the receiving the indication to debug the software system.