2011-08-29 16 views
6

पर उपयोगकर्ता द्वारा निर्दिष्ट जानकारी जोड़ें जावा स्टैकट्रैस में अतिरिक्त जानकारी जोड़ने का कोई तरीका है?जावा स्टैक निशान

मैं एक स्क्रिप्ट भाषा के लिए एक दुभाषिया विकसित कर रहा हूं और जावा स्टैकट्रस में स्क्रिप्ट कोड की इसी पंक्ति को देखना चाहता हूं।

उत्पादन कुछ इस तरह दिखाई दे सकता है:

java.lang.NullPointerException 
at package.IPF_Try.execute(IPF_Try.java:76) called in script.scr:155 
at package.IPF_Block.execute(IPF_Block.java:304) 
at package.IPF_If.execute(IPF_If.java:105) called in script.scr:130 
at package.IPF_Block.execute(IPF_Block.java:304) 
at package.IPF_Main.execute(IPF_Main.java:147) 
... 

या इस:

java.lang.NullPointerException 
at package.IPF_Try.execute(IPF_Try.java:76) 
    --- called in script.scr:155 --- 
at package.IPF_Block.execute(IPF_Block.java:304) 
at package.IPF_If.execute(IPF_If.java:105) 
--- called in script.scr:130--- 
at package.IPF_Block.execute(IPF_Block.java:304) 
at package.IPF_Main.execute(IPF_Main.java:147) 
... 

यह एक बहुत आसान डिबगिंग होगा दुर्भाग्य से गूगल इस लक्ष्य को हासिल करने के लिए कुछ भी नहीं मिला।

एकमात्र तरीका मैं सोच सकता था कि विधियों के साथ कई वर्गों को गतिशील रूप से उत्पन्न करना था, जिनके नाम में मुझे आवश्यक जानकारी है और जो केवल अगली विधि को स्टैकट्रैक में कॉल करती है - लेकिन ऐसा लगता है कि (कर्टजेन) मुझे स्मृति और सीपीयू चक्र।

+0

दिलचस्प सवाल। जावा कंपाइलर फ़ाइल नामों और रेखा संख्याओं के साथ बाइटकोड में डीबग प्रतीकों में डालता है। मुझे लगता है कि अगर आपने बाइटकोड से गड़बड़ की है, तो आप अपनी जरूरतों को बेहतर तरीके से फिट करने के लिए इसे ट्विक कर सकते हैं। क्या जेएसपी कंपेलर ऐसा कुछ कर रहे हैं? – Thilo

+0

@ थिलो - हाँ - जेएसपी को बाइटकोड में संकलित किया जाता है (कभी-कभी मध्यवर्ती जावा फॉर्म का उपयोग करके); आप आमतौर पर संकलित कक्षाओं को अपने सर्वर की "काम करने वाली" निर्देशिकाओं के चारों ओर पोक करके पा सकते हैं। – McDowell

+0

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

उत्तर

1

यदि आप अपनी स्क्रिप्ट को बाइटकोड में अनुवाद करते हैं, तो आप SourceFile और LineNumber विशेषताओं का उपयोग करके डिबगिंग विवरण प्रदान कर सकते हैं।

मुझे रनटाइम पर कॉल-स्टैक में जानकारी इंजेक्ट करने के लिए एक तंत्र से अवगत नहीं है।

+0

यह बहुत बुरा है, SourceFile और Linenumber-Properties पर संदर्भ के लिए धन्यवाद। शायद मुझे कक्षाओं को सभी के बाद उत्पन्न करना होगा, हालांकि मुझे प्रति फ़ाइल और प्रति पंक्ति संख्या की कक्षा की आवश्यकता होगी, इसका मतलब यह होगा कि कई हज़ार डमी कक्षाएं उत्पन्न हो रही हैं ... – ChristophK

+0

@ क्रिस्टोफके, आपको प्रति पंक्ति एक वर्ग की आवश्यकता क्यों है? क्या आप इसके बजाय अपनी स्क्रिप्ट में एक कक्षा प्रति दिन/अनुभाग का उपयोग कर सकते हैं? – jelford

+0

जो काम कर सकता है, हालांकि मैंने "डमी क्लास" बनाने के साथ थोड़ा सा प्रयोग किया, और यहां तक ​​कि कुछ हज़ार भी स्थायी जनरेशन स्पेस का उपयोग करने लगते हैं। – ChristophK

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