2009-08-13 17 views
5

मुझे नोकिया S40 में एक NullPointerException मिल रहा है।मोबाइल डिवाइस में स्टैकट्रैक कैसे प्राप्त करें?

मैं जानना चाहता हूं कि इस अपवाद का कारण क्या है।

डिवाइस पता चलता है:

NullPointerException जावा/लैंग/NullPointerException

यह त्रुटि केवल, इस उपकरण में होता है एमुलेटर आवेदन ठीक काम करता है में चल रहा है।

मैं अपने आवेदन को डीबग करने के लिए microlog का उपयोग करता हूं। लेकिन लॉग सक्षम होने पर एप्लिकेशन ठीक काम करता है।

क्या मुझे यह NullPointerException मिलने पर स्टैक ट्रेस प्राप्त करने का कोई तरीका है? मुझे लाइन नंबर जैसे सभी विवरणों की आवश्यकता नहीं है, इस विधि को इस अपवाद का कारण बनता है।

अद्यतन: मैंने एक ही नोकिया S40 में एक ही एप्लीकेशन स्थापित किया और एक ही त्रुटि नहीं हुई।

  • Nokia 2660 के - त्रुटि
  • नोकिया 6131 - कोई त्रुटि

अद्यतन 2: किसी तरह मैं क्या NullPointerException पैदा कर रहा था पाते हैं।

import javax.microedition.lcdui.Canvas; 
    import javax.microedition.lcdui.Graphics; 

    public class OuterClass extends Canvas { 

    private Config config; 

    public OuterClass() { 
     this.config = new Config(); 
    } 

    public void paint(Graphics graphics) { 
     HelperClass helper = new HelperClass(this.config); 
     helper.doStuff(); 
    } 

    public void dispose() { 
     this.config = null; 
    } 

    public class Config implements IConfig { 
     public int getSomething() { 
      // ... 
     } 
    } 
} 


public class HelperClass { 

     private IConfig config; 

     public HelperClass(IConfig) { 
      this.config = config; 
     } 

     public doStuff() { 
      config.getSomething(); // Here is thrown NullPointerException 
     } 
    } 

कुछ स्थितियों में एक धागा शुरू कर दिया और helper.doStuff से पहले OuterClass.dispose() (फोन किया जाता है) एनपीई के कारण। मुझे लगता है कि जब मैंने लॉग को सक्षम किया था तो यह थ्रेड धीमा और सहायक बना दिया .doStuff() को तब कहा जाता था जब मुझे इसकी उम्मीद की जाती थी।

+0

आप अपने आवेदन नेटवर्क कनेक्टिविटी, ग्राफिक्स आदि की तरह, ऐसा करने के लिए कोशिश कर रहा है कि क्या बारे में अधिक जानकारी जोड़ सकते हैं? – Ram

उत्तर

-2

आप कुछ उच्च स्तरीय प्रयास/पकड़ ब्लॉक में अपवाद को पकड़ने और फिर emailing अपने आप को ट्रेस करने का प्रयास कर सकते हैं।

+0

मुझे नहीं लगता कि इस डिवाइस से ई-मेल भेजने का कोई तरीका है। –

+0

आप एक लॉग फ़ाइल बना सकते हैं और jsr-75 का उपयोग करके इसे लिख सकते हैं। –

+0

जब मैं microlog का उपयोग करके ब्लूटूथ के माध्यम से लॉग लिखता हूं तो त्रुटि नहीं होती है। –

0

मुझे अतीत में मानक आउटपुट की तुलना में कहीं और स्टैक ट्रेस प्रिंट करने की कोशिश करने में कुछ परेशानी थी। मानक exception कक्षा प्रिंटस्टैकट्रेस विधि प्रदान नहीं करती है जो आउटपुट स्ट्रीम प्राप्त करती है, इसलिए यह केवल मानक आउटपुट स्ट्रीम को प्रिंट करती है।

कम से कम जावा एसई में जावा आउटपुट स्ट्रीम को रीडायरेक्ट करने के लिए यह कहीं भी संभव है कि System.out =। प्रिंटस्ट्रीम क्लास को आउटपुटस्ट्रीम प्राप्त होता है, जिसका अर्थ है कि आप अपना खुद का ByteArrayOutputStream बना सकते हैं, प्रिंटस्ट्रीम प्रारंभ कर सकते हैं, उस स्ट्रीम में System.out सेट कर सकते हैं और फिर ex.printStackTrace() को कॉल कर सकते हैं। मेरे पास यहां एक जे 2 एमई वातावरण नहीं है लेकिन मेरा मानना ​​है कि, जब तक आप सिस्टम को सेट करने का प्रयास नहीं करेंगे तब तक यह कुछ नहीं होगा (कुछ भी नहीं कहता है कि यह दस्तावेज़ों में पढ़ा गया है), आपको करने में सक्षम होना चाहिए यह।

ऐसा करने के बाद, मैं इसे रिकॉर्डस्टोर में लिखने की अनुशंसा करता हूं कि आपके पास विशेष रूप से इसके लिए है, और उसके बाद उस रिकॉर्डस्टोर के रिकॉर्ड को अपने सर्वर पर अपलोड करें ताकि आप इसे प्राप्त कर सकें।

मुझे पता है कि यह बहुत आसान नहीं है लेकिन यह काम कर सकता है। मैं पहले सिस्टम की जांच करूँगा। चीज। अगर यह काम करता है, तो बाकी सब कुछ भी काम करना चाहिए।

मेरा उत्तर गलत था। जैसा कि बताया गया है, System.out और System.err फ़ील्ड्स को अंतिम घोषित किया गया है। यदि आपको स्टैक ट्रेस नहीं मिल रहा है, और यदि आप अपने एमुलेटर पर एप्लिकेशन चलाते समय त्रुटि प्राप्त नहीं कर पा रहे हैं, तो कोड के टुकड़े को अलग करने के लिए अपने कोड (अलर्ट, लॉग, जो भी आप कर सकते हैं) पर ट्रेस बुलेट बनाने का प्रयास करें समस्या हो रही है। यह ऐसा कुछ होना चाहिए जो एमुलेटर और वास्तविक डिवाइस के बीच बदल सकता है - उदाहरण के लिए, रिकॉर्डस्टोर में रिकॉर्ड पुनर्प्राप्त/सहेजने से संबंधित कुछ कनेक्शन, कनेक्शन खोलना आदि ... आप समस्या होने पर क्या करने की कोशिश की?

+1

यह गलत है, एमआईडीपी दस्तावेज़ कहते हैं कि System.out और System.err दोनों अंतिम हैं। http://java.sun.com/javame/reference/apis/jsr118/ – funkybro

2

आपको नोकिया सीरीज 40 हैंडसेट पर थ्रोएबल स्टैक ट्रेस बचाने के लिए कोई रास्ता नहीं मिल रहा है।

सीरीज़ 40 पर जावाएमई अनुप्रयोग डीबग करने का सामान्य ब्रूट फोर्स तरीका आपके कोड को स्मृति में स्वयं को एक स्टैक ट्रेस बनाने के लिए संशोधित करना है।

क्या मैं के बारे में बात कर रहा हूँ है:

  • प्रत्येक धागा है कि आप (सिस्टम कॉलबैक धागे सहित) अपने स्वयं के ढेर वस्तु की जरूरत है, स्ट्रिंग से युक्त पहचान कर सकते हैं। जाहिर है, इससे कुछ हद तक आपके आवेदन की स्मृति पदचिह्न बढ़ जाती है लेकिन इसे स्मृति में रखते हुए दौड़ की स्थितियों पर प्रभाव को सीमित करना चाहिए।

  • जब आपका कोड किसी विधि में प्रवेश करता है, तो यह वर्तमान थ्रेड स्टैक में विधि हस्ताक्षर जोड़ता है। जब विधि निकलती है (और आपके पास प्रति विधि केवल एक निकास बिंदु बेहतर होता है) यह स्टैक के शीर्ष पर जाता है।

  • आप स्टैक पर अतिरिक्त डीबग जानकारी जोड़ सकते हैं, जैसे कोड के विभिन्न स्थानों में चर के मान।

  • आपको अपने कोड में प्रत्येक विधि में इसे जोड़ने की आवश्यकता नहीं है।

  • आप try{}catch(Throwable){} को आपके द्वारा पहचाने गए प्रत्येक थ्रेड के प्रवेश बिंदु पर जोड़ सकते हैं और या तो फ़ाइल में या स्क्रीन पर (एक फॉर्म में) स्टैक डंप कर सकते हैं।

जाहिर है, यह एक प्रकार का परिवर्तन नहीं है जिसे आप बड़े पैमाने पर मौजूदा कोडबेस में बहुत से स्थानों में जोड़ना चाहते हैं। हालांकि आप भविष्य के लिए अपने संगठन कोडिंग मानकों का हिस्सा बना सकते हैं और इसे स्वचालित कोड में स्वचालित रूप से जोड़ने के लिए एक स्रोत कोड पार्सिंग स्क्रिप्ट लिख सकते हैं।

0

अपवाद होने पर आप माइक्रो-मेल का उपयोग ई-मेल भेजने के लिए कर सकते हैं।

Microlog

+0

लिंक मर चुका है – j0h

संबंधित मुद्दे