Eclipse Javaデバッグ:ソースが見つかりません


179

EclipseでJavaアプリをデバッグしているときに、次の2つの場合に「ソースが見つかりません」というエラーが表示されます。

  • すでにインポートされている別のプロジェクトのファイルにステップインする
  • インストールされたMavenリポジトリーのファイルにステップインする

「ファイルがありますが、日食は、それらへのステップは、代わりにそれはにボタンを示していませんソースを添付します

アタッチしようとしました(変数を定義するためのダイアログが開きます!)。Eclipseはファイルにジャンプしましたが、デバッガーはそこで変数を検査できませんでした。また、私の場合は数千の依存関係ファイルがあるため、手動で各依存関係のソースを添付することは現実的ではありません。

私はeclipse \ javaを初めて使用するので、これが発生している理由の説明+これを解決する方法は非常に役立ちます。

回答:


53

Eclipseデバッグは、プログラムによって実際にロードされたクラスで機能します。

あなたが説明する症状は、問題のクラスのようではないように聞こえますが、作業しているプロジェクトの前にデバッグ情報が見つからないディストリビューションjar あります。

これはいくつかの理由で発生する可能性がありますが、この動作を示すクラスが見つかった場所を確認してください(ナビゲーションペインで確認してください)。ほとんどの場合、このjarを使用しないようにプロジェクトのビルドパスを変更し、代わりにJVMでプロジェクトを使用する必要があります。

編集:2018年以降、ビルドパスがm2eプラグインによって管理されるMavenのようなビルドフレームワークを使用するのが一般的であるため、この問題は、質問されたときよりも非常に少ないはずです。Mavenおよびm2eを使用する場合は、必ずPreferences / Maven / "Artifact Sourcesをダウンロード"を有効にするか、プロジェクトを右クリックして、Maven / "Sourcesをダウンロード"してください。


すべてに感謝をHIしかし、私はこの答えより便利(スタックオーバーフローリンク)[見つかっstackoverflow.com/questions/5815013/...
SHAREEF

11
@shareefそのリンクは、不足しているソースではなく、不足しているjavadocに関するものです。
–ThorbjørnRavn Andersen 2013

@ACVええ、そうです。多分それはあなたが望むほど精巧ではない-あなたがよりよく説明したいことを私に知らせてもらえますか?
–ThorbjørnRavn Andersen 2015

答えは別の言い方です。問題は「ソースが見つかりません」であり、私の提案は「ソースを見つけようとする」です
Junchen Liu

1
@dheinより詳細な新しい質問を開くことを検討してください。
するThorbjörnRavnアンデルセン

301

Eclipse IDEを構成するためのわずか3つのステップ:

注:ソースルックアップパスを更新した後、デバッグセッションを停止して再起動する必要があります。それ以外の場合、不足しているソースを含むファイルは、「不足しているソース」を表示し続けます。

ソースルックアップの編集[ソースルックアップの編集...]コマンド[ソースルックアップの編集]を選択すると、[ソースパス]ダイアログが開き、選択したデバッグターゲットのソースルックアップパスを変更できます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

重要 この最後のステップの後でEclipse再起動してください


7
ソースルックアップの編集は実際に私のために働いた。ありがとうDouglas Frari
スティーブン・エビコンド'10

3
魅力のように機能します。ありがとう!
Carlos Spohr、2014年

11
それでもうまくいかない場合はどうすればいいですか...私にとっては効果がありません
Saras Arya

11
重要!!うまくいきましたが、実行中のアプリケーションを停止して再起動した後のみです。私がそれをするまで、それはまだソースを取得できなかったかのように見えました。
Jeach

1
私はこれを何ヶ月もオンとオフで扱ってきました。これは完全に機能しました。
aCarella 2017年

45

症状は、見つかったクラスに関連付けられた(または割り当てられた)ソースがない場合を完全に説明しています。

  • 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ソースビューアには、実際に実行される行とは異なる行が表示されます。

空のスペースが実行されていることを示すこともあります。これは、ソースがクラスのランタイムバージョンと一致しないことを意味します。これは不可能だと思っていても可能ですので、正しいソースを設定してください。または、実行しようとしていることに応じて、ランタイムが最新の変更と一致します。


正解です。この回答に欠けている一口はOSGiバンドルに固有です。バンドルにOSGI-OPT / srcが含まれ、バンドルがEclipseプロジェクトのビルドパスにある場合、Eclipseはソースを見つけることができます。:詳細については、この他のstackoverflowの項目を参照してくださいstackoverflow.com/questions/9720483/...
buzz3791

多分あなたはこれを見てみることができます-私はもう試すことができません..
displayname

知ってよかった。理論はたくさんありますが、実際的な解決策はありません。
MasterJoe2 2018

11

http://www.coderanch.com/t/587493/vc/Debugging-Eclipse-Sourceから

「デバッグモードで実行している場合は、実行中のスレッド([スレッド]タブ)を右クリックして[ソースルックアップの編集]を選択します。この時点で、ソースコードを含む必要なプロジェクト/ jarを追加できます。

この方法で現在のプロジェクトを追加し、問題を解決しました


「リモートJavaアプリケーション」または「Java HotSpot VM」のデバッグビューでこれを行う必要がありました。
Abdull

9

私はEclipse Mavenプロジェクトで同様の問題を抱えていました。私はこの問題とかなり長い間戦い、それから私はプロジェクトを再構築しようとしました

mvn clean eclipse:eclipse

そしてそれは助けた。

注:2つのアプローチは大きく異なるため、このアプローチを使用するとm2eプラグインが混乱します。m2eは、「Maven Dependencies」と呼ばれる仮想ノードをプロジェクトに追加し、Mavenにすべての依存関係を追加するように要求します。

mvn eclipse:eclipse一方、はファイルに多数の個別のエントリを作成します.classpath。Eclipseは、JARを手動でプロジェクトに追加したかのようにそれらを処理します。

Eclipseのクラスパスがどのように機能するかを理解していない限り、このアプローチはお勧めできません。


これだけが私にも有効です!mvn eclipse:eclipseプロジェクトの依存関係をJavaビルドパスに追加して、機能するようにします。さらに、m2eclipseプラグインは、「ライブラリー」タブにある「Maven依存関係」にのみプロジェクト依存関係を追加し、デバッガーはそれを見つけることができません。
2014年

何が起こったのかはわかりませんが、これを実行した後、「Maven Dependencies」の下に私のMaven依存関係が表示されなくなりました。
displayname

6

既存のデバッグ構成を削除して、新しいデバッグ構成を作成します。これで問題は解決します。


私はこれに従って、それはうまくいきました。おそらく、新しい実行/デバッグ構成の「ソース」タブに目的のJavaプロジェクトフォルダーも追加したためです。不足しているソースフォルダー/プロジェクトを既存の実行/デバッグ構成の「ソース」タブに追加するだけで、最初にそれを削除しなくても機能する場合があります。
xilef 2014

6

私は同じ問題に直面していました、私は次の手順に従いました。

Window=> Preferences=> Java=> Installed JREs

ここに画像の説明を入力してください

上の画面Jre1.8.0_12で選択したことがわかります。

使用しているJREを選択して、をクリックしますEdit。これで、次の画面が表示されます。

ここに画像の説明を入力してください

ディレクトリをクリックし、Jdkを参照します。次の画面のようになります。 ここに画像の説明を入力してください

OKをクリックして完了です


EclipseがJavaランタイムからクラスをロードできない場合にこのアプローチを使用します(完全な型名がjava.likeで始まるクラスjava.lang.String
Aaron Digulla

4

私のEclipseがプロジェクトのソースコードをデバッグしていないという問題がありました。「ソースコードノードが見つかりました」という空白のページが表示されました。

[ソースコードを添付]ボタンをクリックしてください。次に、「デフォルト」フォルダを削除し、[追加]をクリックして、プロジェクトの場所に移動して添付します。これは私のために働いた


3

私の場合、ソースルックアップを編集してプロジェクトを追加した後でも機能しませんでした。プロジェクトのビルドパスを構成しました。

ここに画像の説明を入力してください

その後、JRE System Libraryを選択しました。

ここに画像の説明を入力してください


2

明らかに、Eclipseは依存するjarのソースコードがどこにあるかを自動的に認識しません。ソースがアタッチされた後、デバッガーが変数を検査できなかった理由は明らかではありません。1つの可能性は、正しくない/互換性のないソースです。

Mavenプロジェクトがあり、依存関係のソースがダウンロードされてローカルリポジトリで利用できると仮定すると、Maven Eclipseプラグインであるm2eclipseをインストールして、問題の解決に役立つかどうかを確認できます。


1

Eclipseにアクセスできる依存関係のソースコードがあるかもしれません。しかし、Eclipseは動的にロードされるコードのソースコードを認識していません。たとえば、Mavenを通じて。

Mavenの場合は、run-jetty-runプラグインを使用することをお勧めします。

http://code.google.com/p/run-jetty-run/

回避策として、デバッガーを使用して実行中のJVMに接続することもでき、コードが表示されます。あるいは、EclipseのDynamic Source Lookupプラグインをここから使用できます。

https://github.com/ifedorenko/com.ifedorenko.m2e.sourcelookup

残念ながら、スペースのあるWindowsパスに問題があるため、私には役に立ちませんでした。

私はEclipse Bugzillaの拡張リクエストを記入しました。この問題「ソースが見つかりません」が永久に消えてしまうことに同意する場合は、ここで投票してください。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=384065

ありがとう!

ササ


これで、このバグに対する私のサポートが得られました。
Abdull

1

「Attach Source」の場合、「Source Attachment Configuration」パネルに他のmavenプロジェクトディレクトリを追加しました。m2リポジトリから最新バージョンのjarを追加しても機能しません。他のMavenプロジェクトのすべてのクラスを開くことができませんでした。

ここに画像の説明を入力してください

ここでのテストは、すべてのJavaソースを含む他のmavenプロジェクトでした。



0

私も同じ問題を抱えていました。私の場合、Window-Preferences-Java-Debug [キャッチされていない例外で実行を一時停止]を無効にしました。次に、コンソールに正しいエラーが表示されました。MySqlユーザーにはデータベースにアクセスする権限がありませんでした。このトピックによると。


0

情報:これは、maven(pom.xml)をいくつかのプロジェクトで使用する場合に考えられる解決策です。

mavenを使用している場合は、対応するpom.xml内で使用しているバージョンを確認してください(例1.0.1-SNAPSHOT)。コードが最新である可能性がありますが、pom.xmlの依存関係はまだ古いJARの/スナップショット(古いコード)を使用しています。

問題を見つける:

  • 対応するファイルをデバッグしてみてください。
  • したがって、関連するコード領域にブレークポイントを設定します。
  • 「ソースが見つかりません」と表示されたら、正しいプロジェクト(.javaファイルが見つかる場所)でバインドしてください。
  • IDEエディターでコンパイル.classファイルが開きます。
  • 「Link with Editor」をクリックして、対応するJAR /スナップショットを見つけます。
  • このJARが最新のものであることを確認してください。おそらく新しいものがあります。その場合は、pom.xmlに最新のバージョン番号を書き込んでください。
  • 次に、mavenの更新を行い、適切なプロジェクトディレクトリにビルドします(たとえば、「mvn clean install -U」)。

0

EclipseまたはSTSを使用している場合は、GC(GrepCodeプラグイン)をインストールして使用してください。ソース.zipファイルをプロジェクトパスに添付する必要がない場合は、GrepCodeが正常に機能します。


0

EclipseでのGlassfishサーバーのデバッグに関連する問題がありました。これは、別のリポジトリからソースコードをロードすることで実現しました(SVNからGitHubに変更)。このプロセスでは、Glassfishサーバーが誤ったコンパイル済みクラスを使用していたため、ソースとランタイムが同期しなくなり、空の行にブレークポイントが表示されていました。

これを解決するには、classesディレクトリの最上位フォルダを名前変更または削除します。Glassfishは、クラスファイルを正しくコンパイルされたバージョンで更新することを含め、クラスディレクトリツリー全体を再作成します。

クラスディレクトリは次の場所にあります:/ workspace / glassfish3122eclipsedefaultdomain / eclipseApps / <your Web Application> / WEB-INF / classes


0

私のTomcatプロジェクトの場合、ここでプロジェクトをチェックしました:ウィンドウ-設定-Tomcat-ソースパス-Javaプロジェクトをソースパスに追加


0

私の場合、他の参照プロジェクトのMavenバージョンがテストプロジェクトのバージョンと一致しませんでした。それらが同じになると、問題は消えました。


0

デバッグモードで実行している場合は、スレッドからの一時停止後に[ソースルックアップの編集]をクリックします。この時点で、ソースコードを含む必要なプロジェクト/ jarを追加できるはずです。この方法で現在のプロジェクトを追加したところ、問題は解決しました。ありがとう



0

データセットを含むExcelファイルを処理し、それを.csvファイルに変換するJavaコードの作業中にこの問題が発生しました。この投稿への回答を試しましたが、機能しませんでした。問題はjarファイル自体でした。必要なjarファイルを1つずつ(古いリリース)ダウンロードしてプロジェクトに追加すると、「ソースが見つかりません」というエラーが消えました。多分あなたはあなたのjarファイルをチェックすることができます。これがお役に立てば幸いです。


0

これは私のために働いた

プロジェクトを右クリック->プロパティ->デプロイメントアセンブリ-> jarを追加



0

まあ、これは私のために働いたものです。StackOverflowで可能なあらゆる解決策を試しました。デバッグメニューでソースの場所を変更してみました。m2eEclipseプラグインをインストールし、組み込みのMavenから変更しました。run-jetty-runをインストールしても何も動作しませんでした。ここで、外部の人のソースコードを表示するのではなく、自分のOWNコードを確認したかったのですが、MYプロジェクトにある自分が記述し​​たメソッドに「ステップイン」するたびに、 「ソースが見つかりました」エラー。

ようやくエキスパートに質問したところ、Eclipseが最初に行っていたのは、デバッグスタックから確認できるClassLoaderを呼び出すことでした。私がしなければならなかったすべてはF6(ステップオーバー)であり、それから私は私の元の呼び出しに戻り、次にF5(ステップイン)に戻りました。そして、私のコードがありました。ため息...そのような単純な修正ですが、1時間の無駄です。


0

初心者向け、

jarファイルが、Eclipseワークスペースにまだ含まれていないプロジェクトの一部である可能性があります。

そのためには、jarファイルのプロジェクト名を知っている必要があります。セイは、例えば、そのABC -18.0.0-SNAPSHOT.jarには、それはあなたがあなたのワークスペースに含めることになっているプロジェクトがあることを意味ABC


0

私はeclipse 2019-03(4.11.0)でも同じ問題を抱えていましたが、デバッグモードで直接起動するのではなく、リモートデバッグでデバッグを行うことによってのみこれを解決できました。


0

ソースを添付->追加->外部アーカイブ-> jarを選択->開く->完了

キャッチは、ソースjarを探し、このjarをアタッチすることです。

たとえば、jarは「-sources」で終わるStax2-api-3.4.1-sources


-1

Maven Javaプロジェクトをデバッグしようとしていて、Eclipseがソースを見つけられない場合は、これらのいずれかを試してください。

  1. これらの行をpom.xmlに追加してみてください
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

maven-> updateを試してからデバッグしてください

  1. プロジェクトのルートディレクトリに移動します。

mvn eclipse:eclipse

今デバッグしてみてください


-1

日食のフォトンで、「ウィンドウ->設定-> Java->デバッグ->高度なソースルックアップを使用する」をオフにしてみてください。

編集:このバージョンのeclipseには、Javaアプリケーションのデバッグ中に「ソースが見つかりません」というメッセージが表示されるという関連するバグがあります。詳細については、バグレポートbugs.eclipse.org/bugs/show_bug.cgi?id=537699を参照してください


OK、このバージョンのeclipseに関連するバグがあり、Javaアプリケーションのデバッグ中に「ソースが見つかりません」というメッセージが表示されます。詳細については、バグレポートbugs.eclipse.org/bugs/show_bug.cgi?id=537699を参照してください
6pi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.