This project is studying dynamic characteristics of runs of faulty programs and designing promising dynamic analysis techniques to identify executed program statements where a fault lies, i.e. the fault candidate set. To narrow the set of statements in the fault candidate set, an array of automated dynamic analyses are being used in conjunction with each other. These analyses consider not only the failed run but also execution perturbations of this faulty run. The goal of this work is to focus the users attention on a small subset of statements in the fault candidate state. Identification of fault candidate set is based upon uncovering of two types of evidence: negative evidence and positive evidence. A negative evidence is considered as an indicator that leads to the conclusion that a value encountered during a failed program run is related to the program's failure. Positive evidence on the other hand indicates that some of the values computed during a failed run are in fact correct. Through a combination of negative and positive evidence we aim to produce a small fault candidate set. As part of this work we are identifying new sources of evidence. We are also carrying out a systematic integration of above dynamic analyses technology into a practical debugging environment.