Saya mendapatkan kesalahan aneh ini di Eclipse ketika mencoba mengatur breakpoint.
Unable to insert breakpoint Absent Line Number Information
Saya mencentang kotak centang dari opsi Kompiler tetapi tidak berhasil.
Saya mendapatkan kesalahan aneh ini di Eclipse ketika mencoba mengatur breakpoint.
Unable to insert breakpoint Absent Line Number Information
Saya mencentang kotak centang dari opsi Kompiler tetapi tidak berhasil.
Jawaban:
Saya memiliki pesan kesalahan yang sama di Eclipse 3.4.1, SUN JVM1.6.0_07 terhubung ke Tomcat 6.0 (berjalan dalam mode debug pada mesin yang berbeda, Sun JVM1.6.0_16, koneksi debug tidak bekerja dengan benar).
Window -> Preferences -> Java -> Compiler -> Generationfile Generation: "tambahkan atribut nomor baris ke file kelas yang dihasilkan" diperiksa. Saya melakukan bersih, kompilasi ulang. Saya menghapus centangnya, mengkompilasi ulang, memeriksanya, mengkompilasi ulang. Saya memastikan proyek itu menggunakan pengaturan global. Masih pesan yang sama.
Saya beralih ke semut bangunan, menggunakan
<javac srcdir="./src/java" destdir="./bin" debug="true">
Masih, pesan yang sama.
Saya tidak tahu apa yang menyebabkan pesan ini dan mengapa pesan itu tidak pergi. Meskipun sepertinya ada hubungannya dengan sesi debug Tomcat yang sedang berjalan: ketika terputus, kompilasi memecahkan masalah. Tetapi saat menghubungkan debugger ke Tomcat atau mengatur breakpoint baru selama sesi debug yang terhubung, itu muncul lagi.
Namun, ternyata pesannya salah : Saya memang dapat men-debug dan mengatur breakpoint, baik sebelum dan selama debugging ( javap -l memang menunjukkan nomor baris, juga). Jadi abaikan saja :)
debug="true"
ke javac
tugas ant
membangun script bekerja.
Ini memperbaiki masalah saya:
Installed JREs
default JDK
bukanJRE
Untuk masalah terkait Musim Semi pertimbangkan bahwa dalam beberapa kasus ini menghasilkan kelas "tanpa nomor baris"; misalnya @Service
kelas beranotasi tanpa antarmuka, tambahkan antarmuka dan Anda dapat men-debug. lihat di sini untuk contoh lengkap.
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
Layanan di atas akan memiliki antarmuka yang dihasilkan oleh pegas yang menyebabkan "nomor baris hilang". Menambahkan antarmuka nyata menyelesaikan masalah generasi:
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
Saya punya jawaban untuk masalah ini dari sisi BlackBerry SDK: Untuk beberapa alasan, tidak peduli berapa kali saya mengubah opsi dalam kompiler, file pengaturan yang mendasarinya sebenarnya tidak berubah.
Lihat di folder .settings proyek Anda untuk file bernama org.eclipse.jdt.core.prefs .
Di sana Anda dapat mengubah pengaturan secara manual:
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
sunting: Lebih jauh dari ini, saya perhatikan bahwa kadang-kadang saya dapat mengabaikan peringatan yang diberikan Eclipse, dan itu masih akan berhenti di tempat yang diperlukan ... curioser dan curioser ... Saya memasukkan ini ke dalam ember hal-hal yang kita pelajari untuk berurusan dengan saat bekerja sebagai dev.
Ini bekerja untuk saya:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, semua opsi harus ke True
.debug="true"
dalam <javac>
tugas build.xml .Debug
modeTidak tahu apakah ini masih relevan, mungkin pelaut lain akan menemukan ini berguna.
Pesan muncul ketika seseorang memiliki file kelas yang dikompilasi bendera debug dimatikan.
Dalam gerhana, Anda dapat menyalakannya dengan opsi yang disebutkan sebelumnya,
Window -> Preferences -> Java -> Compiler -> Classfile Generation: "tambahkan atribut nomor baris ke file kelas yang dihasilkan"
Tetapi jika Anda memiliki file jar, maka Anda akan mendapatkan hasil kompilasi. Tidak ada cara mudah untuk memperbaiki masalah ini.
Jika Anda memiliki akses ke sumber dan menggunakan semut untuk mendapatkan file jar, Anda dapat memodifikasi tugas semut sebagai berikut.
<javac destdir="${build.destDir}" srcdir="${build.srcDir}" source="1.6" fork="true" target="${javac.target}" debug="on" debuglevel="lines,vars,source" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m" optimize="true" >
Selamat men-debug ..
Saya mencoba hampir setiap solusi di sini dan tidak berhasil. Apakah Anda mencoba mengklik "Jangan beri tahu saya lagi"? Setelah melakukannya saya memulai kembali program saya dan semuanya baik-baik saja. Eclipse menghantam breakpoint saya seolah-olah tidak ada yang salah.
Penyebab utama bagi saya adalah Eclipse sedang mencoba men-setup debugging untuk objek proxy Spring CGLIB yang dibuat secara otomatis. Kecuali jika Anda perlu men-debug sesuatu pada tingkat itu, Anda harus mengabaikan masalahnya.
Ini akan membantu jika Anda menunjukkan versi gerhana yang Anda gunakan dan teknologinya (Java JDT, atau AJDT untuk Aspect Java, atau C ++ CDT misalnya), hanya untuk memastikan.
Di sisi Java, saya kira Anda "Centang kotak centang dari opsi Kompiler" mengacu pada ini
Di bawah " Window --> Preferences --> Java --> Compiler --> Classfile Generation
", semua Class file
opsi generasi disetel ke True:
Apakah proyek Anda hanya memeriksa pada tingkat global (Preferensi Windows) atau pada tingkat spesifik proyek?
Dan apakah Anda yakin kelas terbuka (di mana Anda mencoba mengatur breakpoint):
.java
, bukan .class
?Cobalah untuk membersihkan semuanya dan membangun kembali semua, periksa potensi konflik guci .
Saya punya masalah ini ketika mencoba untuk memulai Tomcat dalam mode debugging dari Eclipse. Saya memiliki file build ANT yang mengurus kompilasi dan penyebaran. Setelah mengatur flag debug ke true (seperti yang disebutkan dalam jawaban lain) dan menggunakan kembali aplikasi itu berfungsi dengan baik:
<javac srcdir="./src/java" destdir="./bin" debug="true">
CATATAN: jika Anda baru saja menambahkan bendera debug dan dikompilasi ulang, Anda masih perlu memindahkan aplikasi Anda ke server karena ini adalah tempat Eclipse melakukan debug file-file kelas. Sangat jelas tetapi mudah untuk menghabiskan satu jam atau lebih menggaruk-garuk kepala Anda dan bertanya-tanya mengapa itu tidak berhasil (percayalah).
Karena saya memiliki 6 versi Java yang diinstal, saya harus mengubah kepatuhan JDK default saya agar sesuai dengan versi Java yang ingin saya gunakan. Eclipse secara default telah menetapkan tingkat kepatuhan kompiler ke Java 1.7 ketika semuanya dibangun / dikompilasi menggunakan Java 1.6.
Jadi yang saya lakukan adalah
Sekarang Eclipse tidak mengeluh tentang "Tidak dapat menyisipkan breakpoint Absen Informasi Nomor Baris" dan breakpoint debugging benar-benar berfungsi !!!
Ini dijelaskan secara rinci di sini:
https://github.com/spring-projects/spring-ide/issues/78
Hanya untuk referensi di masa mendatang, ini adalah bagian yang relevan dari jawaban (abaikan fakta yang merujuk pada aplikasi Boot Spring, perilaku sama untuk banyak kasus lainnya):
Setiap kali Anda mengatur breakpoint di Eclipse / STS, IDE mencoba untuk mengatur breakpoint di VM jika Anda meluncurkan aplikasi. Itulah yang terjadi dalam kasus Anda ketika Anda menjalankan aplikasi boot dalam mode debug.
Untuk setiap kelas yang dimuat ke JVM, IDE memeriksa apakah perlu mengatur breakpoint atau tidak. Jika ia memutuskan untuk menetapkan breakpoint, percobaan untuk melakukannya (menggunakan informasi dari definisi breakpoint dalam IDE, termasuk nomor barisnya, karena Anda biasanya menetapkan breakpoint baris pada file sumber pada baris tertentu).
Keputusan ini (apakah akan menetapkan breakpoint pada kelas yang dimuat atau tidak) memeriksa tipe yang Anda set breakpoint, menyertakan tipe, dan kelas dalam. Ini memastikan bahwa breakpoints untuk kelas dalam (bahkan kelas dalam anonim) diatur ke JVM (dan tidak diabaikan).
Spring Boot menghasilkan kelas dalam untuk controller Anda saat runtime (ini adalah kelas dalam yang dihasilkan CGLIB yang muncul dalam pesan kesalahan). Ketika JVM memuat kelas itu, ia mencoba untuk mengatur breakpoint nomor baris dari tipe penutup (untuk kelas dalam ini). Karena kelas dalam yang dihasilkan tidak memiliki informasi nomor baris (tidak perlu memiliki informasi nomor baris), pengaturan breakpoint gagal untuk kelas dalam ini dengan pesan kesalahan yang disebutkan.
Ketika IDE memuat tipe penutup (kelas controller Anda sendiri), ia juga mencoba untuk mengatur garis breakpoint dan berhasil dengan itu. Ini divisualisasikan dengan tanda centang pada penanda breakpoint.
Karena itu Anda dapat dengan aman mengabaikan pesan kesalahan yang muncul. Untuk menghindari pesan kesalahan ini muncul, Anda dapat pergi ke preferensi (Java -> Debug) dan menonaktifkan "Peringatkan ketika tidak dapat menginstal breakpoint karena atribut nomor baris yang hilang".
Situasi saya serupa:
spyTask = spy(new Task())
Task.java
)Breakpoint ini menghasilkan kesalahan yang dimaksud, setiap kali saya menjalankan Debug As... > JUnit Test
Untuk mengatasi masalah ini, saya memindahkan Breakpoint 'up' ke dalam tes yang sebenarnya (di dalam TaskTest.java). Setelah eksekusi berhenti, saya menambahkan breakpoint kembali ke tempat saya memilikinya, awalnya (di dalam Task.java).
Saya masih mendapatkan kesalahan yang sama tetapi setelah mengklik "ok," breakpoint bekerja dengan baik.
Semoga itu bisa membantu seseorang,
-senang
Saya memiliki masalah yang sama ketika saya membuat di jetty server dan mengkompilasi file .war baru oleh ANT. Anda harus membuat versi kompiler dan pembangunan jdk / jre yang sama (misalnya, jdk 1.6v33, jdk 1.7, ....) setelah Anda harus mengatur Java Compiler seperti yang ditulis sebelumnya.
Saya melakukan segalanya dan masih tidak bekerja. Solusinya adalah menghapus file .class yang dikompilasi dan target file perang yang dihasilkan dan sekarang berfungsi :)
Saya menemukan alasan lain untuk pesan ini. Saya sedang memprogram Scala. Solusinya adalah:
Sekarang debugging seharusnya berfungsi. Perhatikan bahwa saya telah menginstal plugin IDE Scala, opsi ini mungkin tidak tersedia jika Anda tidak memilikinya.
Saya memiliki masalah yang sama ketika men-debug PERANG (dibangun dari beberapa artefak proyek Eclipse) yang digunakan untuk Tomcat.
Saya membangun semuanya menggunakan skrip build ANT. Jika ini yang Anda lakukan, pastikan bahwa flag debug = true diset pada setiap tugas semut yang Anda punya. Ini adalah satu-satunya masalah saya - saya harap ini membantu masalah Anda!
Saya memiliki kesalahan yang sama dengan JBoss 7.1 .. Dan saya melakukan hal yang sama seperti Zefiro. Abaikan saja kesalahannya dan saya dapat menempatkan breakpoints secara normal. Dalam kasus saya, saya sedang membangun builder semut pemikiran dan ini adalah tugas javac saya:
<javac
srcdir="${src.dir}"
destdir="${build.classes.dir}"
includeantruntime="false"
debug="${debug}"
verbose="false"
debuglevel="lines,vars,source"
source="1.6"
target="1.6">
<!-- Sppressing warning for setting an older source without bootclasspath
(see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
<compilerarg value="-Xlint:-options"/>
<classpath>
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
</classpath>
</javac>
Saya mendapat masalah yang sama, saya menghabiskan banyak waktu untuk mencari solusi tetapi solusi ini tidak berguna, Jadi saya mempelajari sendiri semua kasus, akhirnya saya menemukan masalah itu adalah konflik di antara versi JDK. Di bawah ini adalah langkah-langkah untuk menyelesaikan masalah: 1. Hapus semua versi JDK dan JRE, simpan hanya satu versi. 2. Atur sistem JAVA_HOME dan kompiler java di Eclipse adalah sama. Dalam beberapa kasus, kesalahan di atas tidak akan hilang, tetapi kami dapat berjalan pada model debug.
Masalah saya adalah saya punya 2 JAR dan saya mencoba untuk menimpa satu dengan yang lain berdasarkan urutannya di Java Build Path => Order & Export
tab di Eclipse, karena satu untuk debugging dan yang lainnya tidak (debugging JAR menjadi yang pertama dalam urutan). Ketika saya melakukannya dengan cara ini, saya harus melampirkan sumber secara manual.
Saya mencoba menghapus JAR non-debug dan menempatkan JAR debug di direktori \ WEB-INF \ lib \, membersihkan, membuat, dll., Dan berhasil. Kali ini (setelah menghapus sumber terlampir), secara otomatis akan membiarkan saya menavigasi kode debug, tanpa harus melampirkan sumber apa pun secara manual. Breakpoints dan debug juga berhasil.
Jika ada yang masih mengalami masalah, saya juga mencoba semua solusi khusus yang disebutkan dalam jawaban lain:
Add line number attributes...
org.eclipse.jdt.core.prefs
sebagaimana disebutkan dalam jawaban lain: https://stackoverflow.com/a/31588700/1599699Saya juga melakukan yang biasa mematikan server (dan memastikan java.exe benar-benar ditutup ...), menghapus direktori \ build \ di kedua proyek, memulai kembali Eclipse dengan parameter -clean, membuat ulang JAR debug, menyegarkan, membersihkan, dan membangun proyek dengan JAR debug di dalamnya, mulai server dalam mode debug, penerbitan / pembersihan, dan breakpointing.
Saya melakukan semua yang tercantum di atas saat mengkompilasi / membangun stoples - masih memiliki masalah yang sama.
Akhirnya, perubahan jvmarg tercantum di bawah saat memulai server adalah yang akhirnya berhasil bagi saya:
1) Dihapus / Berkomentar sekelompok jvm args yang berkaitan dengan javaagent dan bootclasspath.
2) Menghidupkan / membatalkan komentar pada baris berikut:
Kemudian ketika saya memulai server, saya dapat mencapai breakpoints saya. Saya menduga bahwa javaagent itu entah bagaimana mengganggu kemampuan Eclipse untuk mendeteksi nomor baris.
Periksa / lakukan yang berikut ini:
1) Di bawah "Window -> Preferences -> Java -> Compiler -> Classfile Generation", semua opsi harus True:
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) Dalam folder .settings proyek Anda, cari file bernama org.eclipse.jdt.core.prefs. Verifikasi atau setel org.eclipse.jdt.core.compiler.debug.lineNumber = hasilkan
3) Jika jendela kesalahan masih muncul, klik kotak centang untuk tidak menampilkan pesan kesalahan.
4) Bersihkan dan bangun proyek. Mulai debugging.
Biasanya jendela kesalahan tidak ditampilkan lagi dan informasi debugging ditampilkan dengan benar.
Saya mengalami masalah ini juga. Saya menggunakan skrip pembuatan semut. Saya sedang mengerjakan aplikasi warisan jadi saya menggunakan versi jdk 1.4.2. Ini digunakan untuk bekerja jadi saya mulai mencari-cari. Saya perhatikan bahwa di bawah konfigurasi Debug pada tab JRE versi Java telah diatur ke 1.7. Setelah saya mengubahnya kembali ke 1.4 berhasil.
Saya harap ini membantu.
Saya mencoba untuk men-debug manajer logging dan perlu mengubah jre ke jdk dan kemudian untuk memilih jdk ini di tab "utama", "Java Runtime Environment" | "runtime JRE" dari konfigurasi debug maka semuanya baik-baik saja.
Saya melihat masalah ini ketika saya menjelaskan kelas dengan @ManagedBean (javax.annotation.ManagedBean). Pesan peringatan muncul ketika menjalankan aplikasi yang baru dipatuhi di JBoss EAP 6.2.0. Mengabaikannya dan tetap berlari tidak membantu - breakpoint tidak pernah tercapai.
Saya memanggil kacang itu menggunakan EL di halaman JSF. Sekarang ... mungkin saja @ManagedBean tidak baik untuk itu (saya baru menggunakan CDI). Ketika saya mengubah anotasi ke @Model, kacang saya dieksekusi tetapi peringatan breakpoint juga hilang dan saya mencapai breakpoint seperti yang diharapkan.
Singkatnya, sepertinya penjelasan @ManagedBean mengacaukan nomor baris, terlepas dari apakah itu adalah anotasi yang salah untuk digunakan.
Pastikan proyek di mana kelas utama runtime adalah, adalah proyek yang sama di mana kelas Anda memiliki breakpoints . Jika tidak, pastikan kedua proyek berada di classpath dari konfigurasi yang dijalankan, dan muncul sebelum folder guci dan kelas.