We present a novel and uniform technique for normal logic program declarative error diagnosis. We lay down the foundations on a general approach to diagnosis using logic programming, and bring out the close relationship between debugging and fault-finding. Diagnostic debugging can be enacted by contradiction removal methods. It relies on a simple program transformation to provide a contradiction removal approach to debugging, based on revising the assumptions about predicates’ correctness and completeness. The contradiction removal method is justified in turn in terms of wellfounded semantics. The loop detection properties of well-founded semantics will allow in the future for a declarative treatment of otherwise endless derivations. The debugging of programs under well-founded semantics with explict negation is also foreseen. Here, we apply our techniques to finite SLDNF derivations, whose meaning coincides with the well-founded model, for which our contradiction removal method and algorithm is sound and complete. Several examples illustrate the algorithm at work.