Bir kesme noktası ayarlamaya çalışırken Eclipse bu garip hata alıyorum.
Unable to insert breakpoint Absent Line Number Information
Derleyici seçeneklerinden onay kutusunu işaretledim ama şansım yok.
Bir kesme noktası ayarlamaya çalışırken Eclipse bu garip hata alıyorum.
Unable to insert breakpoint Absent Line Number Information
Derleyici seçeneklerinden onay kutusunu işaretledim ama şansım yok.
Yanıtlar:
Eccatse 3.4.1, SUN JVM1.6.0_07 Tomcat 6.0'a bağlı aynı hata iletisine sahiptim (farklı bir makinede hata ayıklama modunda çalışıyor, Sun JVM1.6.0_16, hata ayıklama bağlantısı düzgün çalıştı).
Pencere -> Tercihler -> Java -> Derleyici -> Sınıf Dosyası Üretimi: "oluşturulan sınıf dosyasına satır numarası öznitelikleri ekle" seçildi . Temiz, derleme yaptım. İşaretini kaldırdım, yeniden derledim, kontrol ettim, yeniden derledim. Projenin global ayarları kullandığından emin oldum. Yine de aynı mesaj.
Karınca yapısına geçtim,
<javac srcdir="./src/java" destdir="./bin" debug="true">
Yine de aynı mesaj.
Bu mesaja neyin neden olduğunu ve neden gitmeyeceğini bulamadım. Çalışan Tomcat hata ayıklama oturumu ile ilgili bir şey gibi görünse de: bağlantı kesildiğinde yeniden derleme sorunu çözer. Ancak hata ayıklayıcıyı Tomcat'e bağladığınızda veya bağlı bir hata ayıklama oturumu sırasında yeni kesme noktaları ayarlandığında, tekrar ortaya çıktı.
Ancak, mesajın yanlış olduğu ortaya çıktı : Gerçekten hata ayıklama ve hata ayıklama sırasında hem hata ayıklama ve kesme noktaları ayarlamak mümkün ( javap -l de satır numaralarını gösterdi). Yani görmezden gelin :)
debug="true"
için javac
görevi ant
yapı komut çalıştı.
Bu sorunumu düzeltti:
Installed JREs
varsayılan olarak JDK
yerineJRE
İçin Bahar ilgili sorunlar bazı durumlarda "satırı numaraları olmadan" sınıfları oluşturmak olduğunu düşünün; örneğin @Service
, arabirim içermeyen açıklamalı bir sınıf, arayüzü ekleyin ve hata ayıklayabilirsiniz. tam bir örnek için buraya bakınız .
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
Yukarıdaki hizmet, yay tarafından oluşturulan "eksik satır numaralarına" neden olan bir arayüze sahip olacaktır. Gerçek bir arayüz eklemek nesil sorununu çözer:
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
BlackBerry SDK tarafında bu sorunun cevabı var: Bazı nedenlerden dolayı, derleyicideki seçenekleri kaç kez değiştirirsem değiştireyim, temeldeki ayarlar dosyası değişmedi.
Projenizdeki .settings klasörüne bir dosya arayın. org.eclipse.jdt.core.prefs .
Burada ayarları manuel olarak değiştirebilirsiniz:
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
edit: Buna ek olarak, bazen Eclipse verdiği uyarıyı görmezden gelebileceğimi fark ettim ve yine de gerekli yerde duracak ... meraklı ve meraklı ... Bunu başa çıkmayı öğrendiğimiz şeylerin kovasına koydum dev olarak çalışırken.
Bu benim için çalıştı:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, tüm seçeneklerin olması gerekir True
.debug="true"
Build.xml içinde <javac>
görev.Debug
modda yeniden başlatıldıBunun hala alakalı olup olmadığını bilmiyorum, belki başka bir denizci bunu yararlı bulacaktır.
İleti, hata ayıklama bayrakları kapalı derlenmiş bir sınıf dosyası olduğunda görünür.
Tutulmada, yukarıda belirtilen seçeneklerle açabilirsiniz,
Pencere -> Tercihler -> Java -> Derleyici -> Sınıf Dosyası Üretimi: "oluşturulan sınıf dosyasına satır numarası nitelikleri ekle"
Ancak bir jar dosyanız varsa, derlenmiş çıktıyı alırsınız. Bu sorunu çözmenin kolay bir yolu yoktur.
Kaynağa erişiminiz varsa ve jar dosyasını almak için karınca kullanıyorsanız, karınca görevini aşağıdaki gibi değiştirebilirsiniz.
<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" >
Mutlu hata ayıklama ..
Hemen hemen her çözümü denedim ve şansım yok. "Bana bir daha söyleme" yi tıklamayı denedin mi? Bunu yaptıktan sonra programımı yeniden başlattım ve her şey yolundaydı. Tutulma, yanlış bir şeymiş gibi kırılma noktama çarptı.
Benim için temel neden Eclipse'in otomatik olarak oluşturulan Spring CGLIB proxy nesneleri için hata ayıklama ayarlamaya çalışıyordu. Bu düzeyde bir hata ayıklamanız gerekmedikçe, sorunu görmezden gelmelisiniz.
Emin olmak için kullandığınız tutulma sürümünü ve teknolojiyi (Aspect Java için Java JDT veya AJDT veya örneğin C ++ CDT) belirtmeniz işe yarayabilir.
Java tarafında, ifade eder senin "Derleyici seçenekler arasından Ticked onay kutusunu" varsayalım bu
" Window --> Preferences --> Java --> Compiler --> Classfile Generation
" Altında , tüm ' Class file
' oluşturma seçenekleri True olarak ayarlanır:
Projenizde yalnızca küresel düzeyde (windows Tercihleri) veya projeye özgü düzeyde denetlenenler var mı?
Ve sınıfın açıldığından (bir kesme noktası ayarlamaya çalıştığınızdan) emin misiniz:
.java
bir değil .class
?Her şeyi temizlemeye ve hepsini yeniden oluşturmaya çalışın, olası kavanoz çatışmalarını kontrol edin .
Tomcat Eclipse hata ayıklama modunda başlatmaya çalışırken bu sorunu yaşadım. Derleme ve dağıtma ilgilenen bir ANT yapı dosyası vardı. Hata ayıklama bayrağını true (diğer yanıtlarda belirtildiği gibi) olarak ayarladıktan ve uygulamayı yeniden konuşlandırdıktan sonra düzgün çalıştı:
<javac srcdir="./src/java" destdir="./bin" debug="true">
NOT: Hata ayıklama bayrağını yeni eklediyseniz ve yeniden derlediyseniz, Eclipse'nin sınıf dosyalarında hata ayıkladığı yer olduğu için uygulamanızı sunucuya yeniden konuşlandırmanız gerekir . Çok açık ama başınızı kaşıp bir saat harcamak ve neden işe yaramadığını merak etmek kolay (güven bana).
Yüklü Java'nın 6 farklı sürümü olduğundan, varsayılan JDK uyumluluğumu kullanmak istediğim Java sürümüyle eşleşecek şekilde değiştirmek zorunda kaldım. Eclipse, her şey Java 1.6 kullanılarak derlendiğinde / derlendiğinde derleyici uyumluluk düzeyi Java 1.7 olarak ayarlanmıştı.
Yani tüm yaptığım
Artık Eclipse artık "Kesme noktası Eksik Hat Numarası Bilgisi eklenemiyor" ve hata ayıklama kesme noktaları gerçekten işe yarıyor!
Bu burada ayrıntılı olarak açıklanmaktadır:
https://github.com/spring-projects/spring-ide/issues/78
Sadece gelecekteki referans için, bu cevabın ilgili kısmıdır (bir Spring Boot uygulamasına atıfta bulunan gerçeği göz ardı edin, diğer birçok durum için davranış aynıdır):
Eclipse / STS'de bir kesme noktası ayarladığınızda, IDE bir uygulama başlatırsanız VM'deki kesme noktasını ayarlamaya çalışır. Önyükleme uygulamasını hata ayıklama modunda çalıştırdığınızda durumunuz budur.
JVM'ye yüklenen her sınıf için IDE bir kesme noktası ayarlayıp ayarlamayacağını kontrol eder. Kesme noktasını ayarlamaya karar verirse, bunu yapmaya çalışır (belirli bir satırdaki bir kaynak dosyada genellikle çizgi kesme noktaları ayarladığınızdan, IDE'deki kesme noktası tanımındaki bilgileri satır numarası da dahil olmak üzere kullanarak).
Bu karar (belirli bir yüklü sınıfta kesme noktası ayarlanıp ayarlanmayacağı) kesme noktasını ayarladığınız türleri, kapalı türleri ve iç sınıfları denetler. Bu, iç sınıflar için kesme noktalarının (anonim iç sınıflar bile) JVM'ye ayarlanmasını (ve yoksayılmamasını) sağlar.
Spring Boot, çalışma zamanında denetleyiciniz için bir iç sınıf oluşturur (bu, hata iletisinde görünen CGLIB tarafından oluşturulan iç sınıftır). JVM bu sınıfı yüklediğinde, ekteki türün satır numarası kesme noktasını ayarlamaya çalışır (bu iç sınıf için). Oluşturulan iç sınıf herhangi bir satır numarası bilgisine sahip olmadığından (satır numarası bilgisine sahip olması gerekmez), bu iç sınıf için kesme noktası ayarı belirtilen hata mesajı ile başarısız olur.
IDE, ekteki türü (denetleyici sınıfınızın kendisi) yüklediğinde, satır kesme noktasını ayarlamaya çalışır ve bununla başarılı olur. Bu, kesme noktası işaretleyicisindeki kontrol işaretleyicisi ile görselleştirilir.
Bu nedenle, görüntülenen hata mesajını güvenle yok sayabilirsiniz. Bu hata mesajının görünmesini önlemek için, tercihlere (Java -> Hata Ayıklama) gidebilir ve "Eksik satır numarası nitelikleri nedeniyle kesme noktası yüklenemediğinde uyar" seçeneğini devre dışı bırakabilirsiniz.
Durumum benzerdi:
spyTask = spy(new Task())
Task.java
)Bu kesme noktası, her çalıştırdığımda söz konusu hatayı oluşturur Debug As... > JUnit Test
Sorunu çözmek için Kesme Noktasını 'yukarı' gerçek teste (TaskTest.java içinde) taşıdım. Yürütme durduktan sonra, başlangıçta (Görev.java'nın içinde) kesme noktasını geri ekledim.
Hala aynı hatayı aldım ama "Tamam" ı tıkladıktan sonra kesme noktası gayet iyi çalıştı.
Umarım birine yardım eder,
-gmale
Ben iskele sunucu yapma ve ANT tarafından yeni .war dosya derleme aynı sorun vardı. Java Derleyici'yi daha önce yazıldığı gibi ayarladıktan sonra jdk / jre derleyicisinin aynı sürümünü yapmalı ve yol oluşturmalısınız (örneğin, jdk 1.6v33, jdk 1.7, ....).
Her şeyi yaptım ve hala çalışmıyor. Çözüm, derlenmiş .class dosyalarını ve oluşturulan savaş dosyasının hedefini silmekti ve şimdi çalışıyor :)
Bu mesaj için başka bir neden daha buldum. Scala'yı programlıyordum. Çözüm şuydu:
Şimdi hata ayıklama çalışmalıdır. Scala IDE eklentisini yüklediğime dikkat edin, bu seçeneğe sahip değilseniz bu seçenek kullanılamayabilir.
Tomcat'e dağıtılan bir WAR (birden çok Eclipse projesi eserinden oluşturulmuş) hata ayıklaması sırasında da aynı sorunu yaşadım.
Her şeyi bir ANT derleme betiği kullanarak yapıyorum. Yaptığınız buysa, debug = true bayrağının sahip olduğunuz her javac ant görevinde ayarlandığından emin olun. Bu benim tek sorunumdu - umarım sorununa yardımcı olur!
JBoss 7.1 ile aynı hatayla karşılaştım. Zefiro ile aynı şeyi yaptım. Sadece hatayı görmezden geldi ve ben normalde kesme noktaları yerleştirmek mümkün. Benim durumumda düşünce karınca oluşturucu inşa ediyordum ve bu benim javac görevim:
<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>
Aynı sorunu aldım, çözüm aramak için çok zaman harcadım, ancak bu çözümler işe yaramaz, Bu yüzden tüm vakaları kendi kendime çalışıyorum, nihayet JDK sürümleri arasındaki çelişki olduğunu öğrendim. Sorunu çözmek için adımlar aşağıdadır: 1. Tüm JDK ve JRE sürümlerini kaldırın, yalnızca bir sürümü saklayın. 2. Eclipse'deki JAVA_HOME sistemini ayarlayın ve java derleyici aynıdır. Bazı durumlarda, yukarıdaki hata kaybolmaz, ancak hata ayıklama modelinde çalışabiliriz.
Benim sorunum 2 JAR vardı ve ben onun sırasına göre diğeri ile geçersiz kılmaya çalışıyordu Java Build Path => Order & Export
Eclipse sekmesinde , çünkü biri hata ayıklama için ve diğer değildi (hata ayıklama JAR ilk sırada olmak). Bu şekilde yaptığımda, bir kaynağı elle eklemem gerekti.
Hata ayıklama JAR'ı kaldırmayı ve hata ayıklama JAR'ı \ WEB-INF \ lib \ dizinine yerleştirmeyi, temizlemeyi, kurmayı vb. Denedim ve işe yaradı. Bu kez (ekli kaynağı çıkardıktan sonra), herhangi bir kaynağı manuel olarak eklemek zorunda kalmadan otomatik olarak hata ayıklama kodunda gezinmeme izin verir. Kesme noktaları ve hata ayıklama da çalıştı.
Birisi hala sorun yaşıyorsa, diğer cevaplarda belirtilen tüm bu çözümleri de denedim:
Add line number attributes...
org.eclipse.jdt.core.prefs
Başka bir cevapta belirtildiği gibi manuel düzenleme : https://stackoverflow.com/a/31588700/1599699Ayrıca her zaman her iki projede \ build \ dizinleri silme, -clean parametresi ile Eclipse yeniden başlatma, JAR hata ayıklama, yenileme, sunucunun her zamanki kapatma (ve java.exe aslında kapalı olduğundan emin olun ...) yaptım, projenin hata ayıklama modunda başlatılması, yayımlanması / temizlenmesi ve kesme noktası ile JAR hata ayıklama ile projeyi temizleme ve oluşturma.
Kavanozları derlerken / inşa ederken yukarıda listelenenlerin hepsini yaptım - hala aynı sorunu vardı.
Sonunda, sunucuyu başlatırken aşağıda listelenen jvmarg değişiklikleri nihayet benim için çalıştı:
1) javaagent ve bootclasspath ile ilgili bir grup jvm argümanı kaldırıldı / yorumlandı.
2) Aşağıdaki satırı açmış / yorum yapılmamış:
Sonra sunucuyu başlattığımda kesme noktalarına vurabiliyorum. Javaagent'in Eclipse'nin satır numaralarını algılama yeteneğini bir şekilde etkilediğinden şüpheleniyorum.
Aşağıdakileri kontrol edin / yapın:
1) "Pencere -> Tercihler -> Java -> Derleyici -> Sınıf Dosyası Üretimi" altında, tüm seçeneklerin Doğru olması gerekir:
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) Projenizin .settings klasöründe org.eclipse.jdt.core.prefs adlı bir dosya arayın. Doğrulayın veya ayarlayın org.eclipse.jdt.core.compiler.debug.lineNumber = create
3) Hata penceresi hala görünüyorsa, hata mesajını göstermemek için onay kutusunu tıklayın.
4) Projeyi temizleyin ve inşa edin. Hata ayıklamaya başlayın.
Normalde hata penceresi artık görüntülenmez ve hata ayıklama bilgileri doğru şekilde görüntülenir.
Ben de bu problemle karşılaştım. Ben bir karınca yapı komut dosyası kullanıyorum. Eski bir uygulama üzerinde çalışıyorum, bu yüzden jdk 1.4.2 sürümünü kullanıyorum. Bu eskiden işe yaradı ve etrafa bakmaya başladım. JRE sekmesindeki Debug yapılandırması altında Java sürümünün 1.7 olarak ayarlandığını fark ettim. Tekrar 1.4 olarak değiştirdiğimde işe yaradı.
Umarım bu yardımcı olur.
Günlük yöneticisinde hata ayıklamaya çalışıyordum ve jre jdk değiştirmek ve sonra bu jdk "ana" sekmesinde, "Java Runtime Environment" seçmek için gerekli | "çalışma zamanı JRE" hata ayıklama yapılandırması sonra tüm iyi oldu.
@ManagedBean (javax.annotation.ManagedBean) ile bir sınıfa açıklama eklediğimde bu sorunu gördüm. JBoss EAP 6.2.0'da yeni uygun olan uygulamayı çalıştırırken uyarı mesajı geldi. Onu görmezden gelmek ve yine de koşmak yardımcı olmadı - kesme noktasına asla ulaşılmadı.
O fasulyeyi JSF sayfasında EL kullanarak çağırıyordum. Şimdi ... @ManagedBean bunun için iyi değil (CDI için yeniyim). Ek açıklamamı @Model olarak değiştirdiğimde, fasulyem yürütüldü ancak kesme noktası uyarısı da gitti ve beklendiği gibi kesme noktasına çarptım.
Özetle, @ManagedBean ek açıklaması, kullanılacak yanlış ek açıklama olup olmadığına bakılmaksızın satır numaralarını berbat etmiş gibi görünüyordu.
Çalışma zamanının ana sınıfının bulunduğu projenin , kesme noktalarına sahip olduğunuz sınıfla aynı olduğundan emin olun . Değilse, her iki projenin de çalışma yapılandırmasının sınıf yolunda olduğundan ve kavanozlardan ve sınıf klasörlerinden önce göründüğünden emin olun .