2012-04-02 22 views
10

मुझे बाइटकोड VerifyErrors डिबग करने के लिए कुख्यात रूप से कठिन लगता है। JVM बहुत कम प्रतिक्रिया देता है, आमतौर पर केवल वर्तमान वर्ग और कभी-कभी विधि।VerifyError डीबग करने के लिए अच्छे उपकरण?

त्रुटियों के कुछ उदाहरण मैं आम तौर पर मुठभेड़ जब मैन्युअल ASM या Jasmin के माध्यम से बाईटकोड इंजीनियरिंग:

  • Stack size too large
  • Unable to pop operand off an empty stack
  • Falling off the end of the code
  • Expecting to find object/array on stack
  • Incompatible object argument for function call
  • Inconsistent stack height 4 != 2

(स्पष्ट होना; मैं जानता हूँ कि क्या मतलब है इन के सभी, मैं उन्हें का कारण डिबग करने के लिए उपकरण या तकनीक में दिलचस्पी रखता हूँ)

मेरे प्रश्न:। वहाँ किसी भी उपकरण है जो त्रुटियों के इन प्रकार के बारे में विस्तृत प्रतिक्रिया देता है ? मैं उदाहरण के लिए जानकारी जैसे

  • javap तरह उत्पादन
  • संदर्भ रेखा नंबरों के लिए (या opcode बाइट ऑफसेट)
  • संकार्य ढेर जानकारी (प्रकार/गहराई) प्रत्येक पंक्ति पर की सराहना करेंगे
  • अधिक वर्णनात्मक त्रुटि संदेश
+1

http://stackoverflow.com/questions/3438404/java-lang-verifyerror इससे मदद मिलेगी? – Tom

+0

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatk%2FEX4AA2.htm क्या इससे मदद मिली? – Tom

उत्तर

1

मुझे लगता है कि आप ASM द्वारा प्रदान की गई CheckClassAdapter (http://asm.ow2.org/asm40/javadoc/user/org/objectweb/asm/util/CheckClassAdapter.html) का उपयोग कर सकते हैं। यह त्रुटि सत्यापित करने के बारे में अधिक विस्तृत जानकारी प्रदान करता है।

2

Kraktau project मैंने लिखा है सत्यापन त्रुटियों को डीबग करने के लिए उपयोगी है। यह बाइटकोड ऑफ़सेट देने में सक्षम है जहां त्रुटि होती है, और हर निर्देश के लिए स्टैक और स्थानीय प्रकार की जानकारी। यह subroutines के लिए झंडे और मास्क जानकारी सही ढंग से संभालती है। यह लगभग सभी त्रुटियों को पकड़ने में सक्षम है।

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

अद्यतन: प्रदर्शन मुद्दों के कारण क्राकाटो अब सत्यापन नहीं करता है। यदि आप सत्यापन करना चाहते हैं, तो आपको चेकआउट 3724c05ba11ff6913c01ecdfe4fde6a0f246e5db चेकआउट करना होगा।

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