¿Por qué el depurador de Eclipse da el error "Fuente no encontrada" aparentemente sin razón?

Cuando estoy depurando en Eclipse, a menudo sucede que el depurador se bloquea, mostrando el mensaje de error "No se encontró la fuente" (debajo del cual hay un botón con el texto "Editar ruta de búsqueda de fuente"). Anteriormente he buscado en la web una explicación / solución a este problema, pero no encontré nada que me ayude.

Sin embargo, ahora he descubierto lo que está sucediendo en mi caso: el error se produce al pasar por el código línea por línea y luego salir de un bloque de código en ejecución. No conozco la terminología, pero creo que muchas aplicaciones pueden entrar en "modo de espera" en algún momento, donde actualmente no se está ejecutando ninguno de sus códigos. Un ejemplo es una aplicación gráfica que espera un clic del mouse. Parar en un punto de interrupción en un método MouseListener, y luego salir de él (en "modo de espera") causará el error en mi caso.

He suministrado un MWE al final de esta pregunta. El error se produce cuando coloco un punto de interrupción en la línea.

System.out.println("You clicked!");

y salga de la línea de método por línea usando F6 ("Paso sobre"). Si presiono F8 ("Reanudar") en lugar de F6 en la última línea del oyente, el depurador no falla y todo está bien.

Mi pregunta es: ¿por qué Eclipse hace algo tan grave como para bloquearse en este caso? Entiendo que no hay ninguna línea en el código fuente en la que se pueda decir que el control del programa "pise" después de dejar al oyente en el ejemplo que se muestra a continuación, pero ¿por qué no entrar en "modo de espera" sin quejarme? ¿Puedo desactivar este error de alguna manera, para evitar que mis sesiones de depuración cumplan con tanta frecuencia su final prematuro? ¿O simplemente debo recordar presionar F8 en lugar de F6 cuando esto último causaría un bloqueo?

package app;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;


public class TestFrame extends JFrame {
    public TestFrame() {
        getContentPane().setPreferredSize(new Dimension(200, 200));
        getContentPane().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("You clicked!");
            }
        });
        pack();
    }

    public static void main(String[] args) {
        JFrame testFrame = new TestFrame();
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        testFrame.setVisible(true);
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta