Eclipse でデバッグしているときに、デバッガーがクラッシュして「ソースが見つかりません」というエラー メッセージが表示されることがよくあります (その下に「ソース ルックアップ パスの編集」というテキストのボタンがあります)。この問題の説明/解決策を以前に Web で検索しましたが、何の助けにもなりませんでした。
ただし、私のケースで何が起こっているのかがわかりました。コードを 1 行ずつステップ実行し、実行中のコードのブロックからステップアウトすると、エラーが発生します。用語はわかりませんが、多くのアプリケーションは、現在コードが実行されていない時点で「スタンバイ モード」に入る可能性があると思います。1 つの例は、マウス クリックを待機しているグラフィカル アプリケーションです。私の場合、MouseListener メソッドのブレークポイントで停止し、それから (「スタンバイ モード」に) ステップ アウトすると、エラーが発生します。
この質問の最後に MWE を提供しました。行にブレークポイントを配置するとエラーが発生します
System.out.println("You clicked!");
F6 ("Step Over") を使用して行ごとにメソッドからステップアウトします。リスナーの最後の行で F6 ではなく F8 (「再開」) を押すと、デバッガーはクラッシュせず、すべて問題ありません。
私の質問は次のとおりです。この場合、Eclipse がクラッシュするほど深刻なことを行うのはなぜですか? 以下の例では、プログラム制御がリスナーを離れた後に「ステップする」と言える行がソース コードにないことは理解していますが、文句を言わずに「スタンバイ モード」に移行しないのはなぜですか? デバッグ セッションが頻繁に終了するのを防ぐために、このエラーを無効にすることはできますか? それとも、クラッシュの原因となる F6 の代わりに F8 を押すことを覚えておく必要がありますか?
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);
}
}