मुझे ब्रेकपॉइंट सेट करने की कोशिश के दौरान एक्लिप्स में यह अजीब त्रुटि मिल रही है।
Unable to insert breakpoint Absent Line Number Information
मैंने कंपाइलर विकल्पों से चेकबॉक्स पर टिक किया लेकिन कोई भाग्य नहीं।
मुझे ब्रेकपॉइंट सेट करने की कोशिश के दौरान एक्लिप्स में यह अजीब त्रुटि मिल रही है।
Unable to insert breakpoint Absent Line Number Information
मैंने कंपाइलर विकल्पों से चेकबॉक्स पर टिक किया लेकिन कोई भाग्य नहीं।
जवाबों:
मुझे ग्रहण 3.4.1 में एक ही त्रुटि संदेश मिला था, SUN JVM1.6.0_07 टॉमकैट 6.0 से जुड़ा था (एक अलग मशीन पर डिबग-मोड में चल रहा है, सूर्य JVM1.6.0_16, डीबग कनेक्शन ने सही तरीके से नहीं किया था)।
विंडो -> प्राथमिकताएं -> जावा -> कंपाइलर -> क्लासफाइल जेनरेशन: "जनरेट की गई क्लास फाइल में लाइन नंबर की विशेषताएं जोड़ें" को चेक किया गया। मैं एक साफ, recompile किया था। मैंने इसे अनचेक किया, recompile, इसे चेक किया, recompile। मैंने सुनिश्चित किया कि परियोजना ने वैश्विक सेटिंग्स का उपयोग किया है। अभी भी वही संदेश।
मैं चींटी का निर्माण करने के लिए स्विच, का उपयोग कर
<javac srcdir="./src/java" destdir="./bin" debug="true">
फिर भी, एक ही संदेश।
मुझे पता नहीं चला कि इस संदेश का क्या कारण है और यह क्यों नहीं चलेगा। हालांकि यह चल रहे टॉमकैट डिबग सत्र के साथ कुछ करने के लिए लग रहा था: जब डिस्कनेक्ट किया जाता है, तो समस्या को सुलझाना। लेकिन डिबगर को टॉमकैट से कनेक्ट करने या कनेक्टेड डिबग सत्र के दौरान नए ब्रेकपॉइंट सेट करने पर, यह फिर से दिखाई दिया।
हालांकि, यह पता चला कि संदेश गलत था : मैं वास्तव में डिबग करने और सेट करने में सक्षम था, दोनों डीबगिंग के दौरान और पहले ( जावप-एलएल ने लाइन नंबर, भी दिखाया था)। तो बस इसे अनदेखा करें :)
debug="true"
के javac
कार्य में जोड़ना ant
काम किया।
इसने मेरी समस्या तय कर दी:
Installed JREs
डिफ़ॉल्ट रूप से JDK
इसके बजाय हैJRE
के लिए स्प्रिंग संबंधित मुद्दों पर विचार है कि कुछ मामलों में यह "लाइन नंबर के बिना" वर्गों उत्पन्न; उदाहरण के लिए @Service
, एक इंटरफ़ेस के बिना एक एनोटेट वर्ग, इंटरफ़ेस जोड़ें और आप डीबग कर सकते हैं। एक पूर्ण उदाहरण के लिए यहां देखें ।
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
ऊपर की सेवा में स्प्रिंग द्वारा उत्पन्न एक इंटरफ़ेस होगा, जो "गायब लाइन नंबर" का कारण होगा। एक वास्तविक इंटरफ़ेस जोड़ना पीढ़ी की समस्या को हल करता है:
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
मेरे पास ब्लैकबेरी एसडीके की ओर से इस समस्या का जवाब है: किसी कारण से, चाहे मैंने कितनी बार कंपाइलर में विकल्प बदले हों, वास्तविक अंतर्निहित सेटिंग्स फ़ाइल नहीं बदली।
एक फ़ाइल कहा जाता है के लिए अपनी परियोजना के .settings फ़ोल्डर में एक नज़र org.eclipse.jdt.core.prefs ।
वहां आप सेटिंग्स को मैन्युअल रूप से संशोधित कर सकते हैं:
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
संपादित करें: इसके अलावा, मैंने देखा है कि कभी-कभी मैं ग्रहण के अलर्ट को नजरअंदाज कर सकता है, और यह अभी भी आवश्यक स्थान पर बंद हो जाएगा ... जिज्ञासा और जिज्ञासा ... मैंने इसे उन चीजों की बाल्टी में डाल दिया जिनसे हम निपटना सीखते हैं जब देव के रूप में काम करना।
यह मेरे लिए काम किया:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
, सभी विकल्पों के लिए किया जाना है True
।debug="true"
बिल्ड <javac>
. xml कार्य में बनाया गया ।Debug
मोड में पुनः आरंभ कियान जानें कि क्या यह अभी भी प्रासंगिक है, शायद किसी अन्य नाविक को यह उपयोगी लगेगा।
संदेश तब दिखाई देता है जब किसी के पास एक क्लास फ़ाइल होती है जो डिबग फ़्लैग को बंद कर देती है।
ग्रहण में, आप उपर्युक्त विकल्पों द्वारा इसे चालू कर सकते हैं,
विंडो -> वरीयताएँ -> जावा -> कंपाइलर -> क्लासफाइल जेनरेशन: "जनरेट की गई क्लास फाइल में लाइन नंबर की विशेषताएँ जोड़ें"
लेकिन अगर आपके पास जार फ़ाइल है, तो आपको संकलित आउटपुट मिलेगा। इस समस्या को ठीक करने का कोई आसान तरीका नहीं है।
यदि आपके पास स्रोत तक पहुंच है और जार फ़ाइल प्राप्त करने के लिए चींटी का उपयोग करते हैं, तो आप निम्नानुसार कार्य को संशोधित कर सकते हैं।
<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" >
खुश डिबगिंग ।।
मैंने यहां लगभग हर समाधान की कोशिश की और कोई भाग्य नहीं। क्या आपने "मुझे फिर से मत बताओ" पर क्लिक करने का प्रयास किया? ऐसा करने के बाद मैंने अपना कार्यक्रम फिर से शुरू किया और सब ठीक हो गया। ग्रहण ने मेरे ब्रेकपॉइंट को ऐसे मारा जैसे कि कुछ भी गलत नहीं था।
मेरे लिए मूल कारण ग्रहण था जो ऑटो-जनरेट स्प्रिंग सीजीएलआईबी प्रॉक्सी वस्तुओं के लिए डिबगिंग सेटअप करने की कोशिश कर रहा था। जब तक आपको उस स्तर पर कुछ डिबग करने की आवश्यकता नहीं है, तब तक आपको समस्या को अनदेखा करना चाहिए।
यह मदद करता है अगर आपने ग्रहण के संस्करण का संकेत दिया है जो आप उपयोग कर रहे हैं और तकनीक (जावा जेडीटी, या एस्पेक्ट जावा के लिए एजेडीटी, या उदाहरण के लिए सी ++ सीडीटी), बस सुनिश्चित करने के लिए।
जावा पक्ष में, मुझे लगता है कि आपके "कंपाइलर विकल्पों में से चेकबॉक्स को चखना" यह दर्शाता है
" Window --> Preferences --> Java --> Compiler --> Classfile Generation
" के अंतर्गत , सभी ' Class file
' जेनरेशन ऑप्शन True पर सेट होते हैं:
क्या आपकी परियोजना केवल वैश्विक स्तर पर (विंडोज़ वरीयताएँ) या परियोजना विशिष्ट स्तर पर जाँच की गई है?
और क्या आपको यकीन है कि वर्ग खोला गया था (जिस पर आप एक ब्रेकपॉइंट सेट करने का प्रयास करते हैं):
.java
एक नहीं, .class
?सब कुछ साफ करने और सभी के पुनर्निर्माण की कोशिश करें, संभावित जार संघर्षों की जांच करें ।
एक्लिप्स से डिबगिंग मोड में टॉमकैट शुरू करने का प्रयास करते समय मुझे यह समस्या थी। मेरे पास संकलन और तैनाती का ख्याल रखने वाली ANT बिल्ड फाइल थी। डिबग फ़्लैग को सही पर सेट करने के बाद (जैसा कि अन्य उत्तरों में उल्लेख किया गया है) और एप्लिकेशन को ठीक करने के लिए यह ठीक काम करता है:
<javac srcdir="./src/java" destdir="./bin" debug="true">
नोट: यदि आपने अभी-अभी डिबग फ्लैग को जोड़ा है और आपको recompiled किया है, तब भी आपको अपने एप्लिकेशन को सर्वर पर फिर से इंस्टॉल करने की आवश्यकता है क्योंकि यह वह जगह है जहाँ एक्लिप्स क्लास फ़ाइलों को डीबग कर रहा है। बहुत स्पष्ट लेकिन एक घंटे बिताना आसान है या अपने सिर को खरोंच कर सोच रहा है कि यह काम क्यों नहीं कर रहा है (मुझ पर विश्वास करें)।
चूँकि मेरे पास जावा के 6 अलग-अलग संस्करण स्थापित हैं, इसलिए मुझे अपने डिफ़ॉल्ट JDK अनुपालन को उस मिलान संस्करण से बदलना होगा जो मैं उपयोग करना चाहता था। डिफ़ॉल्ट रूप से ग्रहण का कंपाइलर कंप्लायंस लेवल जावा 1.7 पर सेट किया गया था जब सबकुछ जावा 1.6 का उपयोग करके बनाया गया / संकलित किया गया था।
तो मैंने जो कुछ किया था
अब ग्रहण "ब्रेकपॉइंट डालने में असमर्थ" अनुपस्थित लाइन नंबर जानकारी के बारे में कोई शिकायत नहीं करता है और डिबगिंग ब्रेकप्वाइंट वास्तव में काम करेगा !!!
इसे यहाँ विस्तार से समझाया गया है:
https://github.com/spring-projects/spring-ide/issues/78
भविष्य के संदर्भ के लिए, यह उत्तर का प्रासंगिक हिस्सा है (इस तथ्य को अनदेखा करें कि स्प्रिंग बूट एप्लिकेशन को संदर्भित करता है, व्यवहार अन्य मामलों के लिए समान है):
जब भी आप एक्लिप्स / एसटीएस में एक ब्रेकप्वाइंट सेट करते हैं, तो आईडीई एक ऐप लॉन्च करने पर वीएम में ब्रेकपॉइंट सेट करने की कोशिश करता है। जब आप डिबग मोड में बूट ऐप चलाते हैं तो आपके मामले में यही होता है।
JVM में लोड होने वाले प्रत्येक वर्ग के लिए, IDE जाँच करता है कि उसे ब्रेकपॉइंट सेट करने की आवश्यकता है या नहीं। यदि यह ब्रेकपॉइंट सेट करने का निर्णय लेता है, तो ऐसा करने की कोशिश करता है (आईडीई में ब्रेकपॉइंट परिभाषा से जानकारी का उपयोग करके, इसकी लाइन संख्या सहित, क्योंकि आप आमतौर पर किसी दिए गए लाइन पर एक स्रोत फ़ाइल पर लाइन ब्रेकप्वाइंट सेट करते हैं)।
यह निर्णय (किसी दिए गए लोड किए गए वर्ग पर ब्रेकपॉइंट सेट करना है या नहीं) आप किस प्रकार से ब्रेकपॉइंट सेट करते हैं, इनक्लोजिंग प्रकार और आंतरिक वर्ग की जाँच करते हैं। यह सुनिश्चित करता है कि आंतरिक कक्षाओं (यहां तक कि अनाम आंतरिक वर्ग) के लिए ब्रेकप्वाइंट JVM पर सेट हैं (और इसे अनदेखा नहीं किया गया है)।
स्प्रिंग बूट रनटाइम पर आपके नियंत्रक के लिए एक आंतरिक वर्ग उत्पन्न करता है (यह सीजीएलआईबी उत्पन्न आंतरिक वर्ग है जो त्रुटि संदेश में प्रकट होता है)। जब JVM उस वर्ग को लोड करता है, तो यह एन्क्लोजिंग प्रकार (इस आंतरिक वर्ग के लिए) की लाइन संख्या को निर्धारित करने का प्रयास करता है। चूँकि उत्पन्न आंतरिक वर्ग के पास कोई पंक्ति संख्या जानकारी नहीं है (इसके लिए पंक्ति संख्या की जानकारी होना आवश्यक नहीं है), इस आंतरिक वर्ग के लिए उल्लिखित त्रुटि संदेश के साथ ब्रेकपॉइंट की स्थापना विफल हो जाती है।
जब IDE संलग्नक प्रकार (आपका नियंत्रक वर्ग) को लोड करता है, तो यह लाइन ब्रेकपॉइंट को सेट करने का प्रयास करता है और उसी के साथ सफल होता है। यह ब्रेकप्वाइंट मार्कर पर चेक मार्कर के साथ कल्पना की जाती है।
इसलिए आप उस त्रुटि संदेश को सुरक्षित रूप से अनदेखा कर सकते हैं जो दिखाता है। दिखाने के लिए इस त्रुटि संदेश से बचने के लिए, आप वरीयताओं पर जा सकते हैं (जावा -> डीबग) और "वॉर्न को तब याद रखें जब अनुपलब्ध लाइन संख्या विशेषताओं के कारण ब्रेकपॉइंट स्थापित करने में असमर्थ"।
मेरी स्थिति भी ऐसी ही थी:
spyTask = spy(new Task())
Task.java
)यह ब्रेकपॉइंट हर बार मेरे द्वारा चलाए जाने पर प्रश्न में त्रुटि उत्पन्न करता है Debug As... > JUnit Test
समस्या का समाधान करने के लिए, मैंने ब्रेकपॉइंट को वास्तविक परीक्षण (टास्कटेस्ट.जावा के अंदर) में स्थानांतरित किया। एक बार निष्पादन बंद हो गया, मैंने ब्रेकपॉइंट को वापस जोड़ दिया जहां मेरे पास था, मूल रूप से (टास्क.जवा के अंदर)।
मुझे अभी भी वही त्रुटि मिली लेकिन "ओके" पर क्लिक करने के बाद, ब्रेकप्वाइंट ने ठीक काम किया।
आशा है कि किसी की मदद करता है,
-gmale
जब मैं जेटी सर्वर पर बना रहा था और ANT द्वारा नई .war फ़ाइल संकलित करने में मुझे एक ही समस्या थी। आपको jdk / jre संकलक का एक ही संस्करण बनाना चाहिए और पथ का निर्माण करना चाहिए (उदाहरण के लिए jdk 1.6v33, jdk 1.7, ....) जावा कंपाइलर सेट करने के बाद जैसा कि पहले लिखा गया था।
मैंने सब कुछ किया और अभी भी काम नहीं कर रहा हूं। समाधान संकलित .class फ़ाइलों और उत्पन्न युद्ध फ़ाइल और अब इसके काम के लक्ष्य को हटा दिया गया था :)
मुझे इस संदेश का एक और कारण मिला। मैं स्काला की प्रोग्रामिंग कर रहा था। समाधान था:
अब डिबगिंग काम करना चाहिए। ध्यान दें कि मैंने स्काला आईडीई प्लगइन स्थापित किया है, यदि आपके पास नहीं है तो यह विकल्प उपलब्ध नहीं हो सकता है।
टॉमकैट पर तैनात एक डब्ल्यूएआर (कई ग्रहण परियोजना कलाकृतियों से निर्मित) को डिबग करते समय मुझे यही समस्या थी।
मैं एक एएनटी बिल्ड स्क्रिप्ट का उपयोग करके सब कुछ बना रहा हूं। यदि यह आप कर रहे हैं, तो सुनिश्चित करें कि डिबग = सच्चा झंडा आपके द्वारा प्राप्त किए गए प्रत्येक जेवैक चींटी कार्य पर सेट है। यह मेरी एकमात्र समस्या थी - मुझे आशा है कि यह आपकी समस्या को दूर करने में मदद करेगी!
मुझे JBoss 7.1 के साथ एक ही त्रुटि थी .. और मैंने Zefiro के समान ही किया। बस त्रुटि को नजरअंदाज कर दिया और मैं सामान्य रूप से ब्रेकप्वाइंट लगाने में सक्षम था। मेरे मामले में, मैं चींटी बिल्डर का निर्माण कर रहा था और यह मेरा जेवैक कार्य है:
<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>
मुझे एक ही मुद्दा मिला, मैंने समाधान खोजने के लिए बहुत समय बिताया लेकिन ये समाधान अप्रयुक्त हैं, इसलिए मैं सभी मामलों का स्वयं अध्ययन करता हूं, आखिरकार मुझे पता चला कि यह समस्या जेडीके संस्करणों के बीच भ्रम है। नीचे समस्या को हल करने के लिए कदम है: 1. JDK और JRE संस्करण के सभी निकालें, केवल एक संस्करण रखें। 2. सेट EAVse में JAVA_HOME सिस्टम और जावा कंपाइलर समान है। कुछ मामलों में, उपरोक्त त्रुटि गायब नहीं होगी, लेकिन हम डिबग मॉडल पर चलने में सक्षम हैं।
मेरी समस्या यह थी कि मेरे पास 2 JAR का था और मैं Java Build Path => Order & Export
ग्रहण में टैब में अपने आदेश के आधार पर दूसरे के साथ ओवरराइड करने की कोशिश कर रहा था , क्योंकि एक डीबगिंग के लिए था और दूसरा (डीएआरजी डीएआर क्रम में पहले होने वाला नहीं था)। जब मैंने इसे इस तरह किया, तो मुझे मैन्युअल रूप से एक स्रोत संलग्न करना पड़ा।
मैंने गैर-डीबग जार को हटाने और डीबग जार को अपने \ WEB-INF \ lib \ निर्देशिका में रखने, सफाई, निर्माण, आदि की कोशिश की, और यह काम किया। इस बार (संलग्न स्रोत को हटा दिया गया), यह स्वचालित रूप से मुझे डिबग कोड के माध्यम से नेविगेट करने देगा, बिना किसी स्रोत को मैन्युअल रूप से संलग्न किए बिना। ब्रेकपॉइंट और डीबग ने भी काम किया।
यदि किसी को अभी भी परेशानी हो रही है, तो मैंने इन सभी विशेष समाधानों की कोशिश की, जो अन्य उत्तरों में उल्लिखित हैं:
Add line number attributes...
org.eclipse.jdt.core.prefs
एक अन्य उत्तर में वर्णित रूप से मैन्युअल रूप से संपादन : https://stackoverflow.com/a/31588700/1599699मैंने सर्वर को सामान्य रूप से बंद कर दिया (और सुनिश्चित करें कि java.exe वास्तव में बंद है ...), दोनों प्रोजेक्ट में \ build \ निर्देशिका को हटाकर, -लीन पैरामीटर के साथ ग्रहण को फिर से शुरू करना, डीबग जार को रीफ़्रेश करना, ताज़ा करना। डीबग JAR के साथ प्रोजेक्ट को साफ करना और उसका निर्माण करना, सर्वर को डीबग मोड में शुरू करना, प्रकाशन / सफाई, और ब्रेकपॉइंट करना।
मैंने जार के संकलन / निर्माण के दौरान उपरोक्त सभी चीज़ों को सूचीबद्ध किया था - अभी भी एक ही मुद्दा था।
आखिरकार, सर्वर शुरू करते समय नीचे सूचीबद्ध jvmarg में परिवर्तन होता है, जो आखिरकार मेरे लिए काम करता है:
1) javagent और bootclasspath से संबंधित jvm args का एक गुच्छा निकाला / टिप्पणी की गई।
2) निम्नलिखित पंक्ति को चालू / अन-कम किया गया:
फिर जब मैं सर्वर शुरू करता हूं, तो मैं अपने ब्रेकप्वाइंट को हिट करने में सक्षम हूं। मुझे संदेह है कि लाइन की संख्या का पता लगाने की क्षमता के साथ जावावेंट किसी तरह हस्तक्षेप कर रहा था।
निम्नलिखित जांचें / करें:
1) "विंडो -> प्राथमिकताएं -> जावा -> कंपाइलर -> क्लासफाइल जेनरेशन" के तहत, सभी विकल्पों को सच करना होगा:
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) अपने प्रोजेक्ट के .settings फोल्डर में org.eclipse.jdt.core.prefs नामक फाइल को देखें। Ver.eclipse.jdt.core.compiler.debug.lineNumber = जेनरेट करें या सेट करें
3) यदि त्रुटि विंडो अभी भी दिखाई देती है, तो त्रुटि संदेश प्रदर्शित नहीं करने के लिए चेकबॉक्स पर क्लिक करें।
4) प्रोजेक्ट को स्वच्छ और निर्माण करें। डिबगिंग शुरू करें।
आम तौर पर त्रुटि विंडो किसी भी अधिक प्रदर्शित नहीं होती है और डिबगिंग informations को सही ढंग से प्रदर्शित किया जाता है।
मैं इस समस्या में भी भाग गया। मैं एक चींटी बिल्ड स्क्रिप्ट का उपयोग कर रहा हूं। मैं एक विरासत अनुप्रयोग पर काम कर रहा हूं इसलिए मैं jdk संस्करण 1.4.2 का उपयोग कर रहा हूं। यह काम करता था इसलिए मैंने चारों ओर देखना शुरू किया। मैंने देखा कि JRE टैब पर डीबग कॉन्फ़िगरेशन के तहत जावा का संस्करण 1.7 पर सेट किया गया था। एक बार जब मैंने इसे वापस बदल दिया तो 1.4 ने काम किया।
आशा है कि ये आपकी मदद करेगा।
मैं लॉगिंग मैनेजर को डीबग करने की कोशिश कर रहा था और उसे jdk में बदलने के लिए jre को बदलने की जरूरत थी और फिर "jdk" परिवेश में "मुख्य" टैब में इस jdk को चुनने के लिए। डिबग कॉन्फ़िगरेशन का "रनटाइम JRE" तब सब ठीक था।
मैंने इस समस्या को तब देखा जब मैंने @ManagedBean (javax.annotation.ManagedBean) के साथ एक क्लास एनोटेट किया। JBoss EAP 6.2.0 पर नए संकलित ऐप को चलाने पर चेतावनी संदेश आया। इसे अनदेखा करना और वैसे भी चलाने से कोई फायदा नहीं हुआ - ब्रेकपॉइंट कभी नहीं पहुंचा।
मैं उस सेम को एक जेएसएफ पेज में ईएल का उपयोग करके बुला रहा था। अब ... यह संभव है कि @ManagedBean इसके लिए अच्छा नहीं है (मैं CDI में नया हूं)। जब मैंने अपना एनोटेशन @Model में बदल दिया, तो मेरी सेम निष्पादित हो गई लेकिन ब्रेकपॉइंट चेतावनी भी चली गई और मैंने उम्मीद के मुताबिक ब्रेकपॉइंट मार दिया।
सारांश में यह निश्चित रूप से देखा गया, क्योंकि @ManagedBean एनोटेशन ने लाइनों के नंबरों को गड़बड़ कर दिया, भले ही इसका उपयोग करने के लिए गलत एनोटेशन था या नहीं।
सुनिश्चित करें कि जिस परियोजना में रनटाइम का मुख्य वर्ग है, वही परियोजना है जिसमें वह वर्ग है जिसमें आपके पास ब्रेकपॉइंट हैं । यदि नहीं, तो सुनिश्चित करें कि दोनों प्रोजेक्ट रन कॉन्फ़िगरेशन के क्लासपाथ में हैं, और किसी भी जार और क्लास फ़ोल्डर से पहले दिखाई देते हैं।