Por que o depurador do Eclipse fornece o erro “Origem não encontrada” aparentemente sem motivo?

Quando eu estou depurando no Eclipse, muitas vezes acontece que o depurador falha, exibindo a mensagem de erro "Source not found" (sob o qual é um botão com o texto "Edit Source Lookup Path"). Eu já procurei na web por uma explicação / solução para este problema, mas não encontrei nada de ajuda para mim.

No entanto, agora eu descobri o que está acontecendo no meu caso: O erro ocorre ao percorrer o código linha por linha e, em seguida, sair de um bloco de código em execução. Eu não sei a terminologia, mas eu acho que muitos aplicativos podem entrar em "modo de espera" em algum momento, onde nenhum dos seus códigos está sendo executado. Um exemplo é uma aplicação gráfica esperando por um clique do mouse. Parar em um ponto de interrupção em um método MouseListener e, em seguida, sair dele (em "modo de espera") fará com que o erro no meu caso.

Eu forneci um MWE na parte inferior desta questão. O erro ocorre quando eu coloco um ponto de interrupção na linha

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

e saia do método linha por linha usando F6 ("Step Over"). Se eu pressionar F8 ("Resume") em vez de F6 na última linha do ouvinte, o depurador não falhar e está tudo bem.

Minha pergunta é: por que o Eclipse faz algo tão severo a ponto de falhar nesse caso? Eu entendo que não há nenhuma linha no código-fonte que o controle de programa pode ser dito para "passo a" depois de deixar o ouvinte no exemplo abaixo, mas por que não apenas entrar em "modo de espera" sem reclamar? Posso desativar esse erro de alguma forma, para impedir que minhas sessões de depuração atendam com tanta frequência a sua finalização inoportuna? Ou eu só tenho que lembrar de pressionar F8 em vez de F6 quando o último causaria uma falha?

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);
    }
}

questionAnswers(2)

yourAnswerToTheQuestion