Diagnosing error messages - Tracing unexpected behavior - Understanding obscure compiler or runtime errors