2010-03-20 10 views
9

के लिए कोर डंप समकक्ष अब तक मैंने jstack और jmap का उपयोग करके थ्रेड डंप और हीप डंप उत्पन्न करने के बारे में सीखा है।जावा

हालांकि, jstack थ्रेड डंप में प्रत्येक थ्रेड पर स्टैक का वर्णन करने वाले केवल ग्रंथ हैं। और जावा विजुअलVM के साथ हीप डंप (.hprof फ़ाइल) खोलना केवल ढेर में आवंटित वस्तुओं को दिखाता है।

जो मैं वास्तव में चाहता हूं वह है कि स्टैक को देखने में सक्षम होना, विशेष स्टैक फ्रेम पर स्विच करना और स्थानीय चर देखना। इस तरह के पोस्ट-मॉर्टम डिबगिंग को सामान्य रूप से WinDbg, gdb और कोर फ़ाइल (देशी सी ++ प्रोग्राम के लिए) के साथ किया जा सकता है।

मुझे आश्चर्य है कि ऐसी 'कोर' फ़ाइल (जो मुझे गैर- -जीव वातावरण) जावा में मौजूद है?

उत्तर

2

मुझे Sun forum में प्रासंगिक जानकारी मिली है और SO discussion में: मुझे इसके साथ बहुत भाग्य नहीं मिला है, लेकिन यह आपके मामले में काम कर सकता है।

नोट: उल्लिखित कुछ टूल जावा टूल्स हैं, लेकिन असमर्थित हैं और जेडीके के विंडोज संस्करणों पर उपलब्ध नहीं हैं।

+0

धन्यवाद। मुझे लगता है कि 'jsadebugd' जो मैं ढूंढ रहा हूं उसके बहुत करीब है। – Gant

1

मुझे नहीं लगता कि मानक जावा में ऐसी डंप तंत्र मौजूद है।

5

जावा करता है। यदि आप आईबीएम वीएम का उपयोग कर रहे हैं, तो प्रोग्रामिंग रूप से डंप उत्पन्न करने के लिए com.ibm.jvm.Dump.SystemDump() का उपयोग करें। इसे डीबगर का उपयोग करके डीबग किया जा सकता है। मेरा मानना ​​है कि आपकी जावा प्रक्रिया में "मारना" एक सिस्टम डंप उत्पन्न करना चाहिए। यूनिक्स के लिए kill -4 pid का उपयोग करें जहां पिड प्रक्रिया आईडी है और यदि आपके पास 1 वीएम इंस्टेंस चल रहा है तो top | grep java में टाइप करके पूछताछ की जा सकती है।

तुम भी घटनाओं को फ़िल्टर और वीएम बंद करो की तरह कुछ घटनाओं (-Xdump:system:events=vmstop), पूर्ण कचरा संग्रह पर डंप उत्पन्न (-Xdump:system:events=fullgc) करने के लिए अपने जावा कमांड लाइन के लिए -Xdump:system या -Xdump:heap आदि जोड़ सकते हैं, आदि ध्यान दें, अपने ढेर आकार पर निर्भर करता है, एक पूर्ण जीसी पर एक डंप उत्पन्न करना एक अच्छा विचार नहीं हो सकता है (यानी आप 20 सेकंड के साथ 50 डंप बना सकते हैं यदि आप 20 सेकंड में 4 एम से बढ़कर 60 मीटर तक बढ़ते हैं) तो आप -Xdump:system:events=fullgc,range=50..55 जैसे काउंटर जोड़ सकते हैं जो 5 कोर उत्पन्न करेगा 50 वें से 55 वें पूर्ण कचरा इकट्ठा करने के बीच।

1

कुछ ऑपरेटिंग सिस्टम (उदाहरण के लिए लिनक्स पर सोलारिस एमडीबी या जीडीबी) डंप फ़ाइलों पर सामान्य देशी डीबगर का उपयोग करके समर्थन करते हैं, जावा स्टैक फ्रेम दिखाने के लिए कुछ विशेष समर्थन के साथ। लेकिन यह बहुत कट्टर है और शायद आप जो चाहते हैं वह नहीं, क्योंकि यह जावा डीबगर के साथ अच्छी तरह से एकीकृत नहीं है।