2012-09-25 15 views
13

हम समस्या हमारे लॉगफ़ाइल में निम्न त्रुटि है कि वहाँ है:जावा ArrayIndexOutOfBoundsException: शून्य लेकिन कोई स्टैक ट्रेस क्यों नहीं है?

[2012-09-24 00:09:32.590 +0000UTC] ERROR host server1 [] [] somepackage.someclass [] [Unknown] [V3rAqPaDvvAAAAExEXhdWGyh] [pjsQwTGHzxcAAAE5j4YdGvWV] "ThreadName" Some error happened: java.lang.ArrayIndexOutOfBoundsException: null 

वहाँ केवल इस एक पंक्ति है, और कोई अपवाद नहीं स्टैक ट्रेस है।

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

  • कोई स्टैक ट्रेस हालांकि यह logger.error ("संदेश", theException) पकड़ के अंदर के साथ लॉग होता है:

    1. java.lang.ArrayIndexOutOfBoundsException:

      मैं दो बातों के बारे में सोच रहा हूँ ब्लॉक, जो आमतौर पर एक पूर्ण स्टैक ट्रेस में परिणाम होना चाहिए।

    मेरे सवाल:

    1. कोड किस तरह एक प्रवेश उत्पादन पैदा कर सकता है "java.lang.ArrayIndexOutOfBoundsException: अशक्त"। मैं इसे किसी भी भाग्य के साथ एक परीक्षण कार्यक्रम के साथ पुन: पेश करने की कोशिश करता हूं। मुझे हमेशा कुछ मिलता है जैसे "java.lang.ArrayIndexOutOfBoundsException: अनुक्रमणिका: 3" या तो।

    2. इस तथ्य का कारण हो सकता है कि कोई स्टैक ट्रेस नहीं है, यह कोड रनटाइम पर गतिशील रूप से जेनरेट किया गया है और लॉगर/जेवीएम स्टैक ट्रेस या लाइन नंबर 'पता' नहीं है?

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

    Object obj = null; 
    throw new ArrayIndexOutOfBoundsException("" + obj); 
    
  • आप एक Oracle JVM का उपयोग कर रहे हैं, तो आप यह देखने के लिए एक अतिरिक्त पैरामीटर के रूप में -XX:-OmitStackTraceInFastThrow जोड़ सकते हैं:

  • +0

    संपादित शीर्षक यह स्पष्ट करता है कि यह एक डुप्लिकेट नहीं है। यहां यह सवाल इस बात के बारे में अधिक है कि क्यों कोई स्टैक ट्रेस नहीं है, और अपवाद से कैसे बचें। – Christoph

    +0

    भविष्य में मेरे जैसे अजनबी की मदद के लिए समान प्रश्नों के लिए लिंक :) [कोई स्टैकट्रेस वाला जावा में NullPointerException] (https://stackoverflow.com/q/2411487) और [NullPointerException स्टैक ट्रेस डीबग एजेंट के बिना उपलब्ध नहीं है] (https : //stackoverflow.com/q/1076191)। –

    उत्तर

    18
    1. String एक null संदर्भ में श्रेणीबद्ध आप इस तरह के एक संदेश मिल सकता है यह मदद करता है। कुछ बुनियादी अपवादों के लिए, JVM थोड़ी देर के बाद एक ही अपवाद उदाहरण का पुन: उपयोग करता है, इस स्थिति में अब कोई स्टैक ट्रेस नहीं है। यह विकल्प पुन: उपयोग को रोकता है, इसलिए आपको हमेशा एक स्टैक ट्रेस मिलता है।

    +1

    -XX के लिए धन्यवाद: -OmitStackTraceInFastThrow। उस ध्वज को नहीं पता था। ऐसा लगता है कि अपवाद अब और क्यों नहीं दिखाई दे रहा था। हमने सर्वर को पुनरारंभ किया (इस ध्वज को सेट किए बिना) और अब हम फिर से स्टैक ट्रेस देख रहे हैं। – Christoph

    +0

    मुझे एक सरणी के साथ एक ही समस्या है। पैरामीटर OmitStackTraceInFastThrow मदद करता है। धन्यवाद। – gontard

    +0

    किसी प्रकार के लॉगिंग फ्रेमवर्क (इस मामले में लॉगबैक) का उपयोग करते समय, कोई संदेश के साथ अपवाद (जैसे 'नया MyCoolException();') फेंकने के परिणामस्वरूप 'java.lang.ArrayIndexOutOfBoundsException: null' के समान आउटपुट लॉगर के रूप में होगा दृश्यों के पीछे लॉग लाइन के दूसरे भाग में अपवाद का संदेश (इस मामले में शून्य) को संयोजित करें। –

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