症状は、見つかったクラスに関連付けられた(または割り当てられた)ソースがない場合を完全に説明しています。
- Preferences> Java> Installed JREでJDKクラスのソースを関連付けることができます。JRE(JDKではない)が使用されるデフォルトのJREとして検出された場合、JDKクラスにはソースがアタッチされません。すべてのJDKクラスがソースを提供しているわけではなく、それらの一部はバイナリ形式でのみ配布されていることに注意してください。
- 手動で追加されたプロジェクトのビルドパスのクラスには、関連するソースを手動でアタッチする必要があります。ソースは、zipファイルまたはjarファイル、ワークスペース、またはファイルシステムに常駐できます。Eclipseはzipをスキャンするため、たとえば、ソースがアーカイブファイルのルートにある必要はありません。
- クラス、別のプラグイン(maven、PDEなど)からの依存関係。この場合、ソースの提供方法はプラグイン次第です。
- PDEでは、プラグインのソースを含む、対応するXXX.sourceバンドルが各プラグインに必要です。詳細については、こちらとこちらをご覧ください。
- m2eclipseは、Maven依存関係のソースとjavadocsが利用可能な場合、それらをフェッチできます。この機能は、m2eclipse設定を有効にする必要があります(このオプションは、「ソースとjavadocsをダウンロードする」のような名前でした。
- 他のプラグインについては、それらのドキュメントを参照する必要があります
- プロジェクトから読み込まれたクラスは、プロジェクトのソースと自動的に照合されます。
しかし、クラスとそのソースを正しく設定していても、Eclipseがソースをアタッチするように提案している場合はどうでしょうか。
これはほとんどの場合、Eclipseが予想とは異なる場所からクラスを見つけていることを意味します。ソースルックアップパスを調べて、間違ったクラスを取得する可能性がある場所を確認します。調査結果に応じてパスを更新します。
ブレークポイントにヒットしても、Eclipseは何も検出しません。
これは、ソースルックアップパスに現在ランタイムにロードされているクラスが含まれていない場合に発生します。Eclipseはソースルックアップパスを厳密にたどり、現在デバッグされているプロジェクトの依存関係のみをアタッチするため、クラスがワークスペースにある場合でも、起動構成からは見えない可能性があります。
例外は、PDEのデバッグバンドルです。この場合、ランタイムは相互に依存関係を宣言する必要がない複数のプロジェクトで構成されているため、ソースルックアップパスでクラスが使用できない場合でも、Eclipseはワークスペースでクラスを自動的に検索します。
ブレークポイントに到達しても変数が表示されないか、ソースが開かれるだけでブレークポイントの行が選択されません。
つまり、ランタイムでは、JVMまたはクラス自体に必要なデバッグ情報がありません。クラスがコンパイルされるたびに、デバッグ情報を添付できます。クラスのストレージスペースを減らすために、この情報が省略されることがあり、そのようなコードのデバッグが面倒になります。唯一のチャンスは、デバッグを有効にして再コンパイルすることです。
Eclipseソースビューアには、実際に実行される行とは異なる行が表示されます。
空のスペースが実行されていることを示すこともあります。これは、ソースがクラスのランタイムバージョンと一致しないことを意味します。これは不可能だと思っていても可能ですので、正しいソースを設定してください。または、実行しようとしていることに応じて、ランタイムが最新の変更と一致します。