JVM

2009-08-31 19 views
8

पर एक स्टैक फ्रेम से स्थानीय चर प्राप्त करना क्या डीबगर का उपयोग किए बिना JVM पर वर्तमान दायरे में स्थानीय चर के मानचित्र या अन्य डेटा संरचना को पाने का कोई तरीका है? यही है, मौजूदा ढेर फ्रेम के स्थानीय लोगों को पाने के लिए?JVM

मुझे पता है कि स्टैकट्रैस ऑब्जेक्ट्स हैं, लेकिन StackTraceElement किसी भी राज्य तक पहुंचने का कोई तरीका नहीं है। यह सिर्फ आपको बताता है कि किस विधि को बुलाया गया था, लेकिन इसमें क्या नहीं था।

उत्तर

4

डिबगर्स की सहायता के लिए कक्षा फ़ाइलों में परिवर्तनीय नाम शामिल किए जा सकते हैं, लेकिन javac डिफ़ॉल्ट रूप से ऐसा नहीं करता है। इसे -g:vars विकल्प की आवश्यकता है।

यदि यह मौजूद है, तो स्थानीय प्रोग्राम नाम और दायरे तक पहुंचने के लिए एक प्रोग्राम बाइट-कोड इंजीनियरिंग लाइब्रेरी जैसे ASM का उपयोग कर सकता है।

जबकि this question खराब वाक्यांश है, मुझे लगता है कि यह एक डुप्लिकेट है, और इसका उत्तर आपकी समस्या से प्रासंगिक हो सकता है। मैं जोड़ूंगा कि यदि आपको नामों की परवाह नहीं है, तो स्थानीय चर प्रकार और दायरा हमेशा प्रत्येक विधि की विशेषता तालिका में शामिल होते हैं।

1

मुझे नहीं लगता कि ऐसा करने का कोई तरीका है। संकलक हमेशा स्थानीय चर को अनुकूलित करने के लिए स्वतंत्र होता है, और ऐसी विधि प्रदान करने से संकलक को इस प्रकार के अनुकूलन का लाभ उठाने से रोका जा सकता है। किसी विधि को संकलित करते समय, कंपाइलर यह बताने में सक्षम नहीं होगा कि आपने कार्यक्रम में कहीं और एक hypothetical getLocalVariables() कहा है, इसलिए इसे हमेशा इस तरह के मानचित्र में सभी घोषित स्थानीय चर डालना होगा।

+0

स्थानीय चर स्टैकफ्रेम में मानचित्र में उपलब्ध हैं। आप यहां एक नजर डाल सकते हैं https://docs.oracle.com/javase/7/docs/jdk/api/jpda/jdi/com/sun/jdi/StackFrame.html –