दिलचस्प पोस्ट
PHP में फैक्टरी डिजाइन पैटर्न क्या है? संदर्भित शैली विशेषताओं को ओवरराइड करना कस्टम टैग … क्यों नहीं? फ़ाइल एक्सटेंशन का उपयोग करके C # का उपयोग करें सीमा शुल्क में बाँध वैल्यू विधि कैसे लागू करें? JAXB फ़िल्टर्ड पार्सिंग URL से फ़ाइल नाम प्राप्त करें आईओएस में GMSMapView पर दो स्थानों के बीच मार्ग ड्राइंग jQuery में ट्रिगरहाण्डलर बनाम ट्रिगर एंड्रॉइड में ब्रॉडकास्ट रिसीवर के साथ हेडसेट बटन को पंजीकृत करना क्लिक करें कैसे सिद्धांत के साथ बेतरतीब चयन करने के लिए AngularJS नियंत्रक विरासत डेल्फी कोड फ़ॉर्मेटर एक क्लिक करने योग्य इमेजिव्यू और इमेजबटन के बीच अंतर Jquery / Javascript का उपयोग करके, मेरे वेब पेज में से किसी एक से सभी छवियों को कैसे लोड करें I

स्टैक ट्रेस क्या है, और मैं इसे कैसे उपयोग कर सकता हूं अपने अनुप्रयोग त्रुटियों को डीबग करें?

कभी-कभी जब मैं अपना आवेदन चलाता हूं तो मुझे एक त्रुटि मिलती है जो दिखता है:

Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) 

लोगों ने इसे "स्टैक ट्रेस" के रूप में संदर्भित किया है स्टैक ट्रेस क्या है? यह मेरे कार्यक्रम में होने वाली त्रुटि के बारे में मुझे क्या बता सकता है?


इस प्रश्न के बारे में – अक्सर मुझे एक प्रश्न दिखाई देता है कि नौसिखिए प्रोग्रामर "त्रुटि प्राप्त करने के लिए" कहां है, और वे अपने स्टैक ट्रेस और कुछ यादृच्छिक ब्लॉक कोड को बिना यह समझते हुए चिपकाते हैं कि स्टैक ट्रेस क्या है या इसका उपयोग कैसे किया जा सकता है। यह सवाल नौसिखियों प्रोग्रामर के लिए संदर्भ के रूप में लक्षित है, जिन्हें स्टैक ट्रेस के मूल्य को समझने में सहायता की आवश्यकता हो सकती है।

Solutions Collecting From Web of "स्टैक ट्रेस क्या है, और मैं इसे कैसे उपयोग कर सकता हूं अपने अनुप्रयोग त्रुटियों को डीबग करें?"

सरल शब्दों में, एक स्टैक ट्रेस विधि की एक सूची होती है, जो कि एप्लिकेशन के बीच में था जब अपवाद फेंका गया था।

साधारण उदाहरण

प्रश्न में दिए गए उदाहरण के साथ, हम यह निर्धारित कर सकते हैं कि आवेदन में अपवाद कहाँ फेंका गया था। चलो स्टैक ट्रेस पर नजर डालें:

 Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) 

यह एक बहुत ही सरल स्टैक ट्रेस है I यदि हम "पर …" की सूची की शुरुआत से शुरू करते हैं, तो हम बता सकते हैं कि हमारी त्रुटि कहाँ हुई। हम जो खोज रहे हैं वह सबसे ज्यादा विधि कॉल है जो हमारे आवेदन का एक हिस्सा है। इस मामले में, यह है:

 at com.example.myproject.Book.getTitle(Book.java:16) 

इसे डीबग करने के लिए, हम Book.java को खोल सकते हैं और रेखा 16 , जो है:

 15 public String getTitle() { 16 System.out.println(title.toString()); 17 return title; 18 } 

यह इंगित करेगा कि कुछ (शायद title ) उपरोक्त कोड में null है।

अपवादों की एक श्रृंखला के साथ उदाहरण

कभी-कभी अनुप्रयोग एक अपवाद को पकड़ लेते हैं और एक अन्य अपवाद के कारण के रूप में इसे फिर से फेंकते हैं। यह आम तौर पर दिखता है:

 34 public void getBookIds(int id) { 35 try { 36 book.getId(id); // this method it throws a NullPointerException on line 22 37 } catch (NullPointerException e) { 38 throw new IllegalStateException("A book has a null property", e) 39 } 40 } 

यह आपको एक स्टैक ट्रेस दे सकता है जो ऐसा दिखता है:

 Exception in thread "main" java.lang.IllegalStateException: A book has a null property at com.example.myproject.Author.getBookIds(Author.java:38) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) Caused by: java.lang.NullPointerException at com.example.myproject.Book.getId(Book.java:22) at com.example.myproject.Author.getBookIds(Author.java:36) ... 1 more 

इसके बारे में अलग क्या है "" द्वारा किया गया " कभी-कभी अपवादों में कई "द्वारा किए गए" अनुभाग होंगे इनके लिए, आप आमतौर पर "मूल कारण" को ढूंढना चाहते हैं, जो स्टैक ट्रेस में सबसे कम "कथित" वर्गों में से एक होगा। हमारे मामले में, यह है:

 Caused by: java.lang.NullPointerException <-- root cause at com.example.myproject.Book.getId(Book.java:22) <-- important line 

दोबारा, इस अपवाद के साथ हम देखने के लिए Book.java को देखने के लिए 22 Book.java देखना चाहते हैं, जो यहां Book.java का कारण हो सकता है।

पुस्तकालय कोड के साथ अधिक चुनौतीपूर्ण उदाहरण

आमतौर पर स्टैक ट्रेस ऊपर के दो उदाहरणों की तुलना में अधिक जटिल होते हैं। यहां एक उदाहरण है (यह एक लंबा समय है, लेकिन कई स्तरों में चिपका अपवाद प्रदर्शित करता है):

 javax.servlet.ServletException: Something bad happened at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.example.myproject.ExceptionHandlerFilter.doFilter(ExceptionHandlerFilter.java:28) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.example.myproject.OutputBufferFilter.doFilter(OutputBufferFilter.java:33) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: com.example.myproject.MyProjectServletException at com.example.myproject.MyServlet.doPost(MyServlet.java:169) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:30) ... 27 more Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.example.myproject.MyEntity] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:64) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2822) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:689) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) at $Proxy19.save(Unknown Source) at com.example.myproject.MyEntityService.save(MyEntityService.java:59) <-- relevant call (see notes below) at com.example.myproject.MyServlet.doPost(MyServlet.java:164) ... 32 more Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...] at org.hsqldb.jdbc.Util.throwError(Unknown Source) at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:57) ... 54 more 

इस उदाहरण में, बहुत अधिक है क्या हम ज्यादातर के बारे में चिंतित हैं जो हमारे कोड से हैं उन विधियों की तलाश कर रहे हैं, जो com.example.myproject पैकेज में कुछ भी होगा। दूसरे उदाहरण (ऊपर) से, हम पहले मूल कारण के लिए नीचे देखना चाहते हैं, जो है:

 Caused by: java.sql.SQLException 

हालांकि, लाइब्रेरी कोड के तहत सभी विधि कॉल इसलिए हम इसके ऊपर "कया हुआ" के ऊपर पहुंच जाएंगे, और हमारे कोड से उत्पन्न होने वाली पहली विधि कॉल की तलाश करें, जो है:

 at com.example.myproject.MyEntityService.save(MyEntityService.java:59) 

पिछले उदाहरणों की तरह, हमें लाइन 59 पर MyEntityService.java को देखना चाहिए, क्योंकि यह वह जगह है जहां यह त्रुटि उत्पन्न हुई है (यह थोड़ा स्पष्ट है कि क्या गलत हो गया, चूंकि एसक्यूएलक्सेप्शन त्रुटि बताता है, लेकिन डीबगिंग प्रक्रिया हम बाद में है) ।

मैं इस उत्तर को पोस्ट कर रहा हूं इसलिए सबसे ज्यादा उत्तर (जब गतिविधि से सॉर्ट किया गया) एक ऐसा नहीं है जो सिर्फ सादा गलत है।

स्टैकट्र्रेस क्या है?

स्टैकट्र्रेस एक बहुत ही उपयोगी डिबगिंग टूल है I यह कॉल स्टैक को दिखाता है (अर्थात् उस कार्य के ढेर, जिन्हें उस बिंदु तक बुलाया गया था) उस वक्त जब कोई अपवाद अपवाद फेंका गया था (या उस समय स्टैकट्र्रेस मैन्युअल रूप से उत्पन्न हुआ था)। यह बहुत उपयोगी है क्योंकि यह आपको न केवल दिखाता है कि त्रुटि कहाँ हुई, लेकिन यह भी कि कोड के उस स्थान पर प्रोग्राम कैसे समाप्त हो गया। यह अगले प्रश्न की ओर जाता है:

अपवाद क्या है?

एक अपवाद है कि रनटाइम पर्यावरण आपको बताता है कि एक त्रुटि हुई है। लोकप्रिय उदाहरण हैं NullPointerException, IndexOutOfBoundsException या ArithmeticException। इनमें से प्रत्येक का कारण होता है जब आप ऐसा करने की कोशिश करते हैं जो संभव नहीं है। उदाहरण के लिए, एक NullPointerException फेंक दिया जाएगा जब आप किसी रिक्त ऑब्जेक्ट के लिए dereference की कोशिश:

 Object a = null; a.toString(); //this line throws a NullPointerException Object[] b = new Object[5]; System.out.println(b[10]); //this line throws an IndexOutOfBoundsException, //because b is only 5 elements long int ia = 5; int ib = 0; ia = ia/ib; //this line throws an ArithmeticException with the //message "/ by 0", because you are trying to //divide by 0, which is not possible. 

मैं स्टैकेट्स / अपवादों से कैसे निपटूं?

सबसे पहले, पता करें कि क्या अपवाद पैदा कर रहा है पता लगाने के अपवाद के नाम को दोहन करने की कोशिश करें, उस अपवाद का कारण क्या है ज्यादातर समय गलत कोड के कारण होगा। ऊपर दिए गए उदाहरणों में, सभी अपवाद ग़लत कोड के कारण होते हैं। इसलिए NullPointerException उदाहरण के लिए आप यह सुनिश्चित कर सकते हैं कि उस समय a भी रिक्त नहीं है। उदाहरण के लिए, आप आरंभ a सकते हैं या इस प्रकार की जांच कर सकते हैं:

 if (a!=null) { a.toString(); } 

इस तरह, अपमानजनक पंक्ति निष्पादित नहीं है अगर a==null वही अन्य उदाहरणों के लिए जाता है

कभी-कभी आप यह सुनिश्चित नहीं कर सकते कि आपको अपवाद नहीं मिलता है। उदाहरण के लिए, यदि आप अपने प्रोग्राम में एक नेटवर्क कनेक्शन का उपयोग कर रहे हैं, तो आप कंप्यूटर को इंटरनेट कनेक्शन खोने से रोक नहीं सकते (जैसे आप उपयोगकर्ता को कंप्यूटर के नेटवर्क कनेक्शन को डिस्कनेक्ट करने से रोक नहीं सकते)। इस मामले में नेटवर्क लायब्रेरी शायद एक अपवाद फेंक देगा। अब आपको अपवाद को पकड़ना चाहिए और उसे संभाल करना चाहिए। इसका मतलब है, नेटवर्क कनेक्शन के साथ उदाहरण में, आपको कनेक्शन को फिर से खोलने का प्रयास करना चाहिए या उपयोगकर्ता को सूचित करना चाहिए या ऐसा कुछ। इसके अलावा, जब भी आप पकड़ लेते हैं, हमेशा उस अपवाद को पकड़ते हैं जो आप को पकड़ना चाहते हैं, catch (Exception e) जैसे व्यापक कैश स्टेटस का उपयोग न करें जो सभी अपवादों को पकड़ेगा। यह बहुत महत्वपूर्ण है, क्योंकि अन्यथा आप गलती से गलत अपवाद पकड़ सकते हैं और गलत तरीके से प्रतिक्रिया कर सकते हैं।

 try { Socket x = new Socket("1.1.1.1", 6789); x.getInputStream().read() } catch (IOException e) { System.err.println("Connection could not be established, please try again later!") } 

मुझे catch (Exception e) उपयोग क्यों नहीं करना चाहिए?

चलो यह दिखाने के लिए एक छोटा उदाहरण का उपयोग करें कि आपको केवल अपवादों को क्यों न पकाना चाहिए:

 int mult(Integer a,Integer b) { try { int result = a/b return result; } catch (Exception e) { System.err.println("Error: Division by zero!"); return 0; } } 

यह कोड क्या करने का प्रयास कर रहा है, 0 से संभव विभाजन के कारण ArithmeticException को पकड़ने के लिए है। लेकिन यह एक संभावित NullPointerException पकड़ लेता है जो कि a या b null हैं इसका मतलब है, आप एक NullPointerException प्राप्त कर सकते हैं, लेकिन आप इसे एक अंकगणितीय अपवाद के रूप में NullPointerException लेंगे और शायद गलत काम करते हैं। सबसे अच्छा मामले में आप अभी भी याद करते हैं कि एक NullPointerException था। ऐसी सामग्री जैसे कि डीबगिंग को बहुत कठिन बना देता है, इसलिए ऐसा न करें

TLDR

  1. अपवाद का कारण क्या है, इसे ठीक करें और इसे ठीक करें, ताकि यह अपवाद को बिल्कुल भी नहीं फेंक सके।
  2. यदि 1. संभव नहीं है, विशिष्ट अपवाद पकड़ो और इसे संभाल लें।

    • कभी एक प्रयास / पकड़ न जोड़ें और फिर अपवाद को अनदेखा करें! ऐसा मत करो!
    • कभी catch (Exception e) उपयोग न करें, हमेशा विशिष्ट अपवाद पकड़ो इससे आपको बहुत से सिरदर्द मिलेगा I

रॉब ने क्या उल्लेख किया है उसे जोड़ने के लिए आपके एप्लिकेशन में ब्रेक पॉइंट सेट करना स्टैक के चरण-दर-चरण प्रसंस्करण की अनुमति देता है। इससे डेवलपर को डिबगर का उपयोग करने में सक्षम बनाता है ताकि वह यह देख सकें कि विधि क्या कुछ कर रही है जो अप्रत्याशित था।

चूंकि रॉब ने कुछ सामान्य वर्णन करने के लिए NullPointerException (NPE) का इस्तेमाल किया है, हम इस समस्या को निम्न तरीके से निकालने में मदद कर सकते हैं:

अगर हमारे पास ऐसी कोई विधि है जो मानदंडों को लेती है जैसे: void (String firstName)

हमारे कोड में हम इसका मूल्यांकन करना चाहते हैं कि पहले नाम में एक मान है, हम ऐसा ऐसा करेंगे: if(firstName == null || firstName.equals("")) return;

उपरोक्त हमें पहले नाम को असुरक्षित पैरामीटर के रूप में उपयोग करने से रोकता है इसलिए प्रसंस्करण से पहले रिक्त जांच करके हम यह सुनिश्चित करने में मदद कर सकते हैं कि हमारा कोड ठीक से चल जाएगा। ऐसे उदाहरण पर विस्तार करने के लिए जो किसी ऑब्जेक्ट को विधियों के साथ उपयोग करता है, हम यहां देख सकते हैं:

if(dog == null || dog.firstName == null) return;

उपरोक्त नल की जांच करने का उचित आदेश है, हम इस मामले में आधार वस्तु, कुत्ते से शुरू करते हैं, और फिर प्रसंस्करण से पहले सब कुछ मान्य है यह सुनिश्चित करने के लिए संभावनाओं के पेड़ के नीचे घूमना शुरू करते हैं। यदि ऑर्डर रद्द कर दिया गया था तो एक एनपीई संभावित रूप से फेंक दिया जा सकता है और हमारा प्रोग्राम क्रैश होगा।

थ्रोएबल परिवार द्वारा प्रस्तुत एक और स्टैकट्र्रेस सुविधा है – स्टैक ट्रैस जानकारी को हेरफेर करने की संभावना।

मानक व्यवहार:

 package test.stack.trace; public class SomeClass { public void methodA() { methodB(); } public void methodB() { methodC(); } public void methodC() { throw new RuntimeException(); } public static void main(String[] args) { new SomeClass().methodA(); } } 

स्टैक ट्रेस:

 Exception in thread "main" java.lang.RuntimeException at test.stack.trace.SomeClass.methodC(SomeClass.java:18) at test.stack.trace.SomeClass.methodB(SomeClass.java:13) at test.stack.trace.SomeClass.methodA(SomeClass.java:9) at test.stack.trace.SomeClass.main(SomeClass.java:27) 

छेड़छाड़ किए गए स्टैक ट्रेस:

 package test.stack.trace; public class SomeClass { ... public void methodC() { RuntimeException e = new RuntimeException(); e.setStackTrace(new StackTraceElement[]{ new StackTraceElement("OtherClass", "methodX", "String.java", 99), new StackTraceElement("OtherClass", "methodY", "String.java", 55) }); throw e; } public static void main(String[] args) { new SomeClass().methodA(); } } 

स्टैक ट्रेस:

 Exception in thread "main" java.lang.RuntimeException at OtherClass.methodX(String.java:99) at OtherClass.methodY(String.java:55) 

नाम को समझने के लिए : एक स्टैक ट्रेस एएसए की एक सूची है (या आप "कारण" की एक सूची कह सकते हैं), सबसे सतह अपवाद (उदा। सर्विस लेयर अपवाद) से गहरातम (उदाहरण के लिए डेटाबेस अपवाद)। जिस तरह से हम इसे 'स्टैक' कहते हैं, वैसे ही क्योंकि स्टैक फर्स्ट लास्ट आउट (एफिलो) है, शुरुआत में गहरा अपवाद हुआ था, फिर अपवाद की एक श्रृंखला परिणामों की एक श्रृंखला उत्पन्न हुई, सतह अपवाद अंतिम था एक समय में हुआ, लेकिन हम इसे पहले स्थान पर देखते हैं

कुंजी 1 : एक मुश्किल और महत्वपूर्ण बात यह है कि यह समझने की आवश्यकता है: सबसे गहरा कारण "मूल कारण" नहीं हो सकता है, क्योंकि यदि आप कुछ "खराब कोड" लिखते हैं, तो इसके नीचे कुछ अपवाद उत्पन्न हो सकता है जो इसकी परत से गहरा है। उदाहरण के लिए, एक खराब एसक्यूएल क्वेरी सिंडैक्स त्रुटि के बजाय बाइटम में SQLServerException कनेक्शन रीसेट कर सकती है, जो हो सकता है कि स्टैक के मध्य में हो।

-> मध्य में मूल कारण की खोज करना आपकी नौकरी है यहां छवि विवरण दर्ज करें

कुंजी 2 : एक अन्य मुश्किल लेकिन महत्वपूर्ण बात यह है कि ब्लॉक "प्रत्येक कारण" में है, पहली पंक्ति सबसे गहरी परत थी और इस खंड के लिए पहली जगह होगी। उदाहरण के लिए,

 Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14) 

Book.java:16 को Auther.java:25 कहा जाता था जिसे बूटस्ट्रैप.जावा 14 द्वारा बुलाया गया था, बुक। जावा 16 मूल कारण था। यहां एक आरेख को कालानुक्रमिक क्रम में ट्रेस स्टैक सॉर्ट करें। यहां छवि विवरण दर्ज करें

बस अन्य उदाहरणों में जोड़ने के लिए, आंतरिक (नेस्टेड) ​​कक्षाएं हैं जो $ चिह्न का उपयोग करके प्रदर्शित की जाती हैं उदाहरण के लिए:

 public class Test { private static void privateMethod() { throw new RuntimeException(); } public static void main(String[] args) throws Exception { Runnable runnable = new Runnable() { @Override public void run() { privateMethod(); } }; runnable.run(); } } 

इस स्टैक ट्रेस में परिणाम होगा:

 Exception in thread "main" java.lang.RuntimeException at Test.privateMethod(Test.java:4) at Test.access$000(Test.java:1) at Test$1.run(Test.java:10) at Test.main(Test.java:13) 

अन्य पदों का वर्णन है कि स्टैक ट्रेस क्या है, लेकिन इसके साथ काम करना अभी भी मुश्किल हो सकता है।

यदि आप एक स्टैक ट्रेस प्राप्त करते हैं और अपवाद के कारण का पता लगाने के लिए चाहते हैं, तो समझने में एक अच्छा प्रारंभ बिंदु ईक्लिप्स में जावा स्टैक ट्रेस कंसोल का उपयोग करना है यदि आप किसी अन्य IDE का उपयोग करते हैं, तो एक समान सुविधा हो सकती है, लेकिन यह उत्तर एक्लिप्स के बारे में है।

सबसे पहले, यह सुनिश्चित करें कि आपके पास सभी जावा स्रोत एक्लिप्स परियोजना में पहुंच योग्य हैं।

फिर जावा परिप्रेक्ष्य में, कंसोल टैब पर क्लिक करें (आमतौर पर नीचे) यदि कंसोल दृश्य दृश्यमान नहीं है, तो मेनू विकल्प विंडो पर जाएं – दृश्य देखें और कंसोल चुनें।

फिर कंसोल विंडो में, नीचे दिए गए बटन पर क्लिक करें (दाईं ओर)

कंसोल बटन

और फिर ड्रॉप-डाउन सूची से जावा स्टाक ट्रेस कंसोल का चयन करें

कंसोल में अपना स्टैक ट्रेस पेस्ट करें यह तब आपके स्रोत कोड में लिंक की एक सूची और उपलब्ध किसी भी अन्य स्रोत कोड प्रदान करेगा।

यह वही है जिसे आप देख सकते हैं (ईक्लिप्स दस्तावेज की छवि):

एक्लिप्स दस्तावेज़ीकरण से आरेख

सबसे हाल ही में बनाई गई विधि कॉल स्टैक के ऊपर होगी, जो शीर्ष पंक्ति (संदेश पाठ को छोड़कर) है। स्टैक नीचे जा रहे समय में वापस चला जाता है दूसरी पंक्ति विधि है जो पहली पंक्ति को कॉल करती है, आदि।

यदि आप ओपन सोर्स सॉफ़्टवेयर का उपयोग कर रहे हैं, तो आपको अपनी प्रोजेक्ट को डाउनलोड करने और संलग्न करने की ज़रूरत है यदि आप देखना चाहते हैं। स्रोत के जार डाउनलोड करें, अपनी खुली-स्रोत मॉड्यूल (कक्षा फाइलों वाला एक) के लिए अपने जार को खोजने के लिए संदर्भित पुस्तकालय फ़ोल्डर खोलें, फिर ठीक क्लिक करें, गुणों का चयन करें और स्रोत जार संलग्न करें