We present a slicing approach for analyzing logic programs with respect to non-termination. The notion of a failure-slice is presented which is an executable reduced fragment of the program. Each failureslice represents a necessary termination condition for the program. If a failure-slice does not terminate it can be used as an explanation for the non-termination of the whole program. To effectively determine useful failure-slices we combine a constraint based static analysis with the dynamic execution of actual slices. The current approach has been integrated into a programming environment for beginners. Further, we show how our approach can be combined with traditional techniques of termination analysis.