Eclipse java debugging: sumber tidak ditemukan

179

Saat debugging aplikasi java di eclipse saya menerima kesalahan " Sumber tidak ditemukan " dalam dua kasus:

  • Melangkah ke file di proyek lain yang sudah diimpor
  • Melangkah ke sebuah file di repositori maven yang diinstal

File ada di sana, tetapi gerhana tidak akan masuk ke dalamnya, melainkan menunjukkan tombol untuk " melampirkan sumber "

Saya mencoba melampirkan (yang membuka dialog untuk mendefinisikan variabel ?!) dan gerhana memang melompat ke file, tetapi debugger tidak dapat memeriksa variabel apa pun di sana. Juga secara manual melampirkan sumber untuk setiap ketergantungan tidak praktis, seperti dalam kasus saya ada ribuan file ketergantungan.

Saya baru mengenal eclipse \ java sehingga penjelasan mengapa hal ini terjadi + cara mengatasinya akan banyak membantu!

Jonathan
sumber

Jawaban:

53

Eclipse debugging berfungsi dengan kelas yang sebenarnya dimuat oleh program.

Gejala yang Anda gambarkan seperti kelas yang dimaksud tidak ditemukan di proyek, tetapi di tabung distribusi tanpa info debug yang ditemukan sebelum proyek yang Anda kerjakan.

Ini dapat terjadi karena beberapa alasan tetapi lihat lokasi di mana kelas yang menunjukkan perilaku ini ditemukan (lihat di panel navigasi untuk mengidentifikasinya). Anda kemungkinan besar perlu mengubah jalur pembangunan proyek untuk menghindari penggunaan tabung ini dan meminta JVM menggunakan proyek tersebut.

EDIT: Perhatikan bahwa pada 2018 adalah umum untuk menggunakan kerangka kerja seperti Maven, di mana jalur build dikelola oleh plugin m2e sehingga masalah ini harus sangat jarang terjadi daripada ketika pertanyaan diajukan. Jika Anda menggunakan Maven dan m2e, pastikan untuk mengaktifkan Preferensi / Maven / "Unduh Sumber Artefak" atau klik kanan proyek, Maven / "Unduh Sumber".

Thorbjørn Ravn Andersen
sumber
hai terima kasih untuk semua tetapi saya menemukan jawaban ini lebih bermanfaat (stack over flow link) [ stackoverflow.com/questions/5815013/…
shareef
11
@shareef tautan itu adalah tentang javadoc yang hilang, bukan sumber yang hilang.
Thorbjørn Ravn Andersen
@ ACV Ya, ya. Mungkin itu tidak rumit seperti yang Anda inginkan - bisakah Anda memberi tahu saya apa yang ingin Anda jelaskan lebih baik?
Thorbjørn Ravn Andersen
jawabannya adalah cara lain untuk mengatakan: masalahnya adalah "sumber tidak ditemukan", dan saran saya adalah "cobalah untuk menemukan sumbernya"
Junchen Liu
1
@dhein Pertimbangkan untuk membuka pertanyaan baru dengan lebih banyak detail.
Thorbjørn Ravn Andersen
301

Hanya 3 langkah untuk konfigurasi IDE Eclipse:

Catatan: Setelah memperbarui jalur Pencarian Sumber, Anda harus berhenti dan memulai kembali sesi debug Anda. Jika tidak, file dengan sumber yang hilang akan terus menunjukkan "sumber yang hilang".

Edit Source Lookup Pilih perintah Edit Source Lookup ... [Edit Source Lookup] untuk membuka Dialog Jalur Sumber, yang memungkinkan Anda untuk membuat perubahan pada jalur pencarian sumber dari target debug yang dipilih.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

PENTING Restart Eclipse setelah langkah terakhir ini.

Douglas Frari
sumber
7
Mengedit Pencarian Sumber sebenarnya bekerja untuk saya. Terima kasih Douglas Frari
stephen ebichondo
3
Bekerja seperti pesona. Terima kasih!
Carlos Spohr
11
dan bagaimana jika itu tidak berhasil ... karena itu tidak bekerja untuk saya
Saras Arya
11
Penting!! Bekerja dengan baik, tetapi hanya SETELAH saya menghentikan aplikasi yang sedang berjalan dan memulai kembali. Sampai saya melakukannya sepertinya masih tidak bisa mendapatkan sumbernya.
Jeach
1
Saya sudah berurusan dengan ini dan mematikan selama berbulan-bulan. Ini bekerja dengan sempurna.
aCarella
45

Gejala-gejala menggambarkan dengan sempurna kasus ketika kelas yang ditemukan tidak memiliki sumber terkait (atau ditugaskan).

  • Anda dapat mengaitkan sumber untuk kelas JDK di Preferensi> Java> JRE Terinstal . Jika JRE (bukan JDK) terdeteksi sebagai JRE default yang akan digunakan, maka kelas JDK Anda tidak akan memiliki sumber terlampir. Perhatikan bahwa, tidak semua kelas JDK menyediakan sumber, beberapa dari mereka didistribusikan dalam bentuk biner saja.
  • Kelas dari jalur pembangunan proyek, ditambahkan secara manual mengharuskan Anda secara manual melampirkan sumber terkait. Sumber dapat berada di file zip atau jar, di ruang kerja atau di sistem file. Eclipse akan memindai zip, jadi sumber Anda tidak harus berada di root file arsip, misalnya.
  • Kelas, dari dependensi yang berasal dari plugin lain (pakar, PDE, dll.). Dalam hal ini, tergantung pada plugin bagaimana sumber akan disediakan.
    • PDE akan mengharuskan setiap plugin memiliki bundel sumber XXX yang sesuai , yang berisi sumber plugin. Informasi lebih lanjut dapat ditemukan di sini dan di sini .
    • m2eclipse dapat mengambil sumber dan javadocs untuk dependensi Maven jika tersedia. Fitur ini harus diaktifkan preferensi m2eclipse (opsi itu bernama sesuatu seperti " Unduh sumber dan javadocs ".
    • Untuk plugin lain, Anda perlu membaca dokumentasinya
  • Kelas, yang diambil dari proyek Anda secara otomatis dicocokkan dengan sumber-sumber dari proyek.

Tetapi bagaimana jika Eclipse masih menyarankan Anda melampirkan sumber, bahkan jika saya menetapkan kelas dan sumbernya dengan benar:

Ini hampir selalu berarti bahwa Eclipse menemukan kelas dari tempat yang berbeda dari yang Anda harapkan. Periksa jalur pencarian sumber Anda untuk melihat di mana ia mungkin mendapatkan kelas yang salah. Perbarui jalur sesuai dengan temuan Anda.

Eclipse tidak menemukan apa pun, ketika breakpoint terkena:

Ini terjadi, ketika Anda path pencarian sumber tidak mengandung kelas, yang saat ini dimuat di runtime. Bahkan jika kelas ada di ruang kerja, itu bisa tidak terlihat dengan konfigurasi peluncuran, karena Eclipse mengikuti jalur pencarian sumber secara ketat dan hanya menempel pada dependensi proyek, yang saat ini didebug.

Pengecualian adalah bundel debugging di PDE . Dalam hal ini, karena runtime terdiri dari beberapa proyek, yang tidak harus mendeklarasikan ketergantungan satu sama lain, Eclipse akan secara otomatis menemukan kelas di ruang kerja, bahkan jika itu tidak tersedia di jalur pencarian sumber.

Saya tidak bisa melihat variabel ketika saya menekan sebuah breakpoint atau itu hanya membuka sumber, tetapi tidak memilih baris breakpoint:

Ini berarti bahwa dalam runtime, baik JVM atau kelas sendiri tidak memiliki informasi debug yang diperlukan. Setiap kelas dikompilasi, informasi debug dapat dilampirkan. Untuk mengurangi ruang penyimpanan kelas, kadang-kadang informasi ini dihilangkan, yang membuat debug kode seperti itu menyakitkan. Satu-satunya kesempatan Anda adalah mencoba dan mengkompilasi ulang dengan debug diaktifkan.

Penampil sumber Eclipse menunjukkan baris yang berbeda dari yang sebenarnya dieksekusi:

Kadang-kadang dapat menunjukkan bahwa ruang kosong dieksekusi juga. Ini berarti bahwa sumber Anda tidak cocok dengan versi runtime kelas Anda. Bahkan jika Anda berpikir bahwa ini tidak mungkin, ya, jadi pastikan Anda menyiapkan sumber yang benar. Atau runtime Anda cocok dengan perubahan terbaru Anda, tergantung pada apa yang Anda coba lakukan.

Danail Nachev
sumber
Jawaban yang sangat bagus! Berita gembira yang hilang dari jawaban ini khusus untuk bundel OSGi: Eclipse dapat menemukan sumber jika bundel berisi OSGI-OPT / src dan bundel tersebut ada di jalur pembangunan proyek Eclipse. Lihat item stackoverflow lainnya ini untuk detail: stackoverflow.com/questions/9720483/…
buzz3791
Mungkin Anda bisa melihat pada ini - aku keluar dari hal-hal untuk mencoba sudah ..
displayname
Senang mendengarnya. Banyak teori, tetapi tidak ada solusi praktis.
MasterJoe2
11

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

"Ketika berjalan dalam mode debug, klik kanan pada thread yang sedang berjalan (di tab thread) dan pilih Edit Source Lookup. Pada titik ini, Anda harus dapat menambahkan proyek / tabung yang diperlukan yang berisi kode sumber Anda."

Saya menambahkan proyek saya saat ini dengan cara ini, dan itu menyelesaikan masalah saya

Vering
sumber
Saya harus melakukan ini dalam tampilan Debug, ada di bawah "Remote Java Application" atau "Java HotSpot VM".
Abdull
9

Saya memiliki masalah yang sama dengan proyek gerhana maven saya. Saya berjuang dengan masalah ini cukup lama kemudian saya mencoba untuk membangun kembali proyek

mvn clean eclipse:eclipse

dan itu membantu.

Catatan: Menggunakan pendekatan ini akan membingungkan plugin m2e karena kedua pendekatan tersebut sangat berbeda. m2e menambahkan simpul virtual ke proyek Anda yang disebut "Ketergantungan Maven" dan meminta Maven untuk menambahkan semua dependensi di sana.

mvn eclipse:eclipse, di sisi lain, akan membuat banyak entri individual dalam file .classpath. Eclipse akan menanganinya seolah-olah Anda menambahkan JAR secara manual ke proyek Anda.

Kecuali Anda tahu bagaimana classpath di Eclipse bekerja, pendekatan ini tidak disarankan.

krzysiek.ste
sumber
Hanya ini yang bekerja untuk saya juga! mvn eclipse:eclipsetambahkan ketergantungan proyek ke jalur pembangunan java, jadi itu berfungsi. Selain itu, plugin m2eclipse akan menambahkan ketergantungan proyek hanya di "Ketergantungan Maven" yang ada di tab Libraries, dan debugger tidak dapat menemukannya.
naif
Saya tidak tahu apa yang terjadi, tetapi setelah menjalankan ini saya tidak melihat ketergantungan maven saya di bawah "Ketergantungan Maven" lagi.
displayname
6

Hapus Konfigurasi Debug yang ada dan buat yang baru. Itu harus menyelesaikan masalah.

Rajneesh Sekharmantri
sumber
Saya mengikuti ini dan itu berhasil. Mungkin karena saya juga menambahkan folder proyek java yang diinginkan pada tab 'Sumber' run / debug konfigurasi baru. Mungkin hanya menambahkan folder / proyek sumber yang hilang ke tab 'Sumber' dari konfigurasi run / debug yang ada dapat bekerja tanpa harus menghapusnya terlebih dahulu.
xilef
6

Saya menghadapi masalah yang sama, saya mengikuti langkah-langkah di bawah ini.

Window=> Preferences=> Java=> Installed JREs,

masukkan deskripsi gambar di sini

Anda lihat di layar di atas Jre1.8.0_12dipilih.

pilih JRE yang Anda gunakan dan klik Edit. Sekarang Anda akan melihat layar di bawah.

masukkan deskripsi gambar di sini

Klik pada direktori, telusuri Jdk, Seharusnya terlihat seperti layar di bawah ini. masukkan deskripsi gambar di sini

klik ok, dan sudah selesai

Varun
sumber
Gunakan pendekatan ini jika Eclipse tidak dapat memuat kelas dari runtime Java (kelas apa pun dengan nama tipe penuh dimulai dengan java.seperti java.lang.String)
Aaron Digulla
4

Saya punya masalah yang Eclipse saya tidak men-debug kode sumber proyek saya. Saya mendapatkan halaman kosong dengan "Source code node found".

Silakan klik tombol Lampirkan kode sumber. Kemudian hapus folder "default" lalu klik add dan pergi ke lokasi proyek Anda dan lampirkan. Ini berhasil untuk saya

sebuah vas
sumber
3

Dalam kasus saya, bahkan setelah Mengedit pencarian sumber dan proyek Menambahkan, itu tidak berhasil. Saya mengkonfigurasi jalur Bangun proyek.

masukkan deskripsi gambar di sini

Setelah itu, saya memilih JRE System Library dan itu berhasil.

masukkan deskripsi gambar di sini

Germa Vinsmoke
sumber
2

Jelas, Eclipse tidak secara otomatis tahu di mana kode sumber untuk guci dependen berada. Tidak jelas mengapa debugger tidak dapat memeriksa variabel setelah sumber dilampirkan. Salah satu kemungkinan adalah sumber yang salah / tidak kompatibel.

Dengan asumsi Anda memiliki proyek maven dan sumber-sumber dependensi diunduh dan tersedia di repositori lokal, Anda mungkin ingin menginstal m2eclipse , plugin maven eclipse dan melihat apakah itu membantu dalam mengatasi masalah Anda.

Raghuram
sumber
1

Anda mungkin memiliki kode sumber ketergantungan yang dapat diakses oleh Eclipse. Tetapi Eclipse tidak tahu kode sumber untuk kode yang dimuat secara dinamis. Misalnya melalui Maven.

Dalam kasus Maven, saya sarankan Anda menggunakan plugin run-jetty-run:

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

Sebagai solusinya Anda juga dapat terhubung ke JVM yang sedang berjalan dengan debugger dan Anda akan melihat kode. Atau Anda dapat menggunakan plugin Dynamic Source Lookup untuk Eclipse dari sini:

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

Sayangnya itu tidak membantu saya karena memiliki masalah dengan jalur Windows dengan spasi.

Saya telah mengisi permintaan peningkatan pada Eclipse Bugzilla dan jika Anda menyetujui masalah ini, "Sumber tidak ditemukan" akan hilang selamanya, pilih di sini:

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

Terima kasih!

Sasa

ssasa
sumber
Anda sekarang mendapatkan dukungan saya pada bug ini!
Abdull
1

Dalam kasus saya di "Sumber Lampirkan", saya menambahkan direktori proyek pakar lainnya di panel "Konfigurasi Sumber Lampiran". Menambahkan stoples versi terbaru dari m2 repositori din't work. Semua kelas dari proyek pakar lainnya gagal dibuka.

masukkan deskripsi gambar di sini

Di sini tes adalah proyek pakar saya yang lain yang berisi semua sumber java.

Beruntung
sumber
0

Saya memiliki masalah yang sama. Dalam kasus saya, saya telah menonaktifkan Window-Preferences-Java-Debug [Tangguhkan eksekusi dengan pengecualian yang tidak tertangkap]. Kemudian, konsol menunjukkan kesalahan yang benar: pengguna MySql saya tidak memiliki hak istimewa untuk mengakses database. Menurut topik ini.

Alex
sumber
0

Info: Ini adalah solusi yang memungkinkan, ketika Anda menggunakan maven (pom.xml) dengan beberapa proyek.

Jika Anda bekerja dengan maven, pastikan versi apa yang Anda ambil di dalam pom.xml yang sesuai (mis. 1.0.1-SNAPSHOT). Mungkin saja kode Anda mutakhir, tetapi dependensi pom.xml Anda masih menggunakan JAR / Snapshots lama (dengan kode lama).

Menemukan masalah:

  • Cobalah untuk men-debug file yang sesuai.
  • Oleh karena itu, atur breakpoint di area kode yang relevan.
  • Ketika "sumber tidak ditemukan" muncul, pastikan untuk mengikat di proyek yang tepat (di mana file .java dapat ditemukan).
  • File compile .class terbuka di editor IDE.
  • Klik "Tautan dengan Editor" untuk menemukan JAR / Snapshot yang sesuai.
  • Sekarang pastikan bahwa JAR ini adalah yang terbaru. Mungkin ada yang lebih baru. Dalam hal ini, tulis nomor versi terbaru di pom.xml.
  • Kemudian lakukan pembaruan dan pembuatan maven (mis. "Mvn clean install -U") di direktori proyek yang benar.
Birol Efe
sumber
0

Jika Anda menggunakan eclipse atau STS silakan instal dan Gunakan GC (GrepCode Plugin), beberapa saat Anda tidak perlu melampirkan file .zip sumber ke jalur proyek Anda sehingga GrepCode berfungsi dengan baik untuk Anda.

Daniel Adenew
sumber
0

Saya memiliki masalah terkait sehubungan dengan debugging server Glassfish di Eclipse. Ini disebabkan oleh memuat kode sumber dari repositori yang berbeda (berubah dari SVN ke GitHub). Dalam prosesnya, kelas kompilasi yang salah digunakan oleh server Glassfish dan karenanya, sumber dan waktu berjalan akan tidak sinkron dengan break point muncul pada baris kosong.

Untuk mengatasinya, ganti nama atau hapus folder teratas direktori kelas dan Glassfish akan membuat ulang seluruh pohon direktori kelas termasuk memperbarui file kelas dengan versi yang dikompilasi dengan benar.

Direktori kelas terletak di: / workspace / glassfish3122clipsedefaultdomain / eclipseApps / <Aplikasi Web Anda> / WEB-INF / classes

pengguna3035873
sumber
0

Dalam kasus saya dengan proyek kucing jantan saya telah memeriksa proyek di sini: Jendela - Preferensi - Tomcat - Jalur Sumber - Tambahkan proyek java ke jalur sumber

pengguna3132194
sumber
0

Dalam kasus saya, versi Maven dari proyek referensi lain tidak cocok dengan versi proyek uji. Begitu mereka sama, masalahnya hilang.

maarten
sumber
0

Saat berjalan dalam mode debug, klik Edit Pencarian Sumber setelah ditangguhkan dari utas. Pada titik ini, kita harus dapat menambahkan proyek / toples yang diperlukan yang berisi kode sumber Anda. Setelah saya menambahkan proyek saya saat ini dengan cara ini, dan itu menyelesaikan masalah saya. Terima kasih

Yoga
sumber
0

Jika Anda ingin melampirkan kode sumber ke JAR dengan mengunduh otomatis, coba gunakan plugin Eclipse Java Source Attacher ini

masukkan deskripsi gambar di sini

KrishPrabakar
sumber
0

Saya punya masalah ini ketika bekerja pada kode java untuk melakukan proses pada file excel yang berisi kumpulan data, kemudian mengubahnya menjadi file .csv, saya mencoba jawaban untuk posting ini, tetapi mereka tidak berfungsi. masalahnya adalah toples itu sendiri. setelah mengunduh file jar yang dibutuhkan satu per satu (rilis yang lebih lama) dan menambahkannya ke proyek saya, kesalahan "sumber tidak ditemukan" menghilang. mungkin Anda dapat memeriksa file jar Anda. Semoga ini bisa membantu.

simin
sumber
0

ini bekerja untuk saya

klik kanan pada proyek -> Properties -> Deployment Assembly -> tambahkan toples Anda

TajnosAgentos
sumber
0

Pergi ke konfigurasi Debug di gerhana dan gunakan tujuan di bawah ini untuk menjalankan aplikasi Anda.

-Dmaven.surefire.debug

misalnya

-Dmaven.surefire.debug exec: java

Vishvesh Phadnis
sumber
0

Nah, inilah yang bekerja untuk saya. Saya mencoba setiap solusi yang mungkin ada di StackOverflow. Saya mencoba mengubah lokasi sumber saya di menu debug, saya menginstal plugin Eclipse m2e, saya berubah dari embedded Maven, dan saya menginstal run-jetty-run dan tidak ada yang berhasil. Sekarang, saya akan memperingatkan bahwa saya tidak mencoba untuk melihat kode sumber orang eksternal, saya hanya ingin melihat kode SENDIRI saya, tetapi setiap kali saya "melangkah" ke metode saya yang saya tulis yang ada dalam proyek SAYA, saya mendapatkan Galat "Sumber sekarang ditemukan".

Setelah akhirnya bertanya kepada pakar, masalah saya adalah bahwa hal pertama yang dilakukan Eclipse adalah memanggil ClassLoader, yang dapat Anda lihat dari tumpukan debug. Yang harus saya lakukan adalah F6 (melangkah) dan kemudian membawa saya kembali ke panggilan asli saya dan kemudian F5 (melangkah masuk). Dan ada kode saya. Huh ... perbaikan sederhana tapi satu jam terbuang sia-sia.

Chris C
sumber
0

Untuk pemula,

Ada kemungkinan bahwa file jar adalah bagian dari proyek yang belum Anda sertakan dalam ruang kerja Eclipse.

Untuk itu, Anda perlu tahu nama proyek file jar. Katakan misalnya, abc -18.0.0-SNAPSHOT.jar, itu artinya proyek yang seharusnya Anda sertakan di ruang kerja Anda abc .

Shobhit Mittal
sumber
0

Saya memiliki masalah yang sama dengan eclipse 2019-03 (4.11.0) dan saya hanya dapat menyelesaikan ini dengan melakukan debugging melalui debugging jarak jauh daripada langsung meluncurkannya dalam mode debug.

Kai
sumber
0

Lampirkan sumber -> Tambah -> Arsip Eksternal -> pilih tabung -> buka -> selesai

tangkapannya adalah mencari toples sumber dan pasang toples ini.

misalnya toples berakhir dengan "-sources" Stax2-api-3.4.1-sources

kranti
sumber
-1

Jika Anda mencoba men-debug proyek java maven Anda, dan eclipse tidak dapat menemukan sumber Anda, coba salah satu dari ini.

  1. Coba tambahkan baris ini di pom.xml
<build>**<sourceDirectory>src/main/java</sourceDirectory>**...

Coba perbarui -> dan kemudian debug

  1. Pergi ke direktori root proyek;

mvn eclipse: eclipse

sekarang coba debugging

Rajan
sumber
-1

Dalam eclipse photon coba matikan "Window-> Preferences-> Java-> Debug-> Gunakan pencarian sumber lanjutan"

Sunting: Ada bug terkait dalam versi gerhana ini yang mengarah ke pesan "sumber tidak ditemukan" saat men-debug aplikasi Java. Lihat laporan bug bugs.eclipse.org/bugs/show_bug.cgi?id=537699 untuk rincian lebih lanjut

6pi
sumber
Oke, ada bug terkait dalam versi gerhana ini yang mengarah ke pesan "sumber tidak ditemukan" saat men-debug aplikasi Java. Lihat laporan bug bugs.eclipse.org/bugs/show_bug.cgi?id=537699 untuk rincian lebih lanjut
6pi