2008-10-27 11 views
6

मुझे प्रोग्रामेटिक रूप से थ्रेड डंप उत्पन्न करना पसंद है। मैंने सीखा है कि यह करने के लिए वहाँ एक मूल रूप से दो तरीके:थ्रेड डंप प्रोग्रामेटिकली/जेडीआई (जावा डीबगर इंटरफेस)

  1. "जावा वर्चुअल मशीन उपकरण इंटरफ़ेस" JVM-TI
  2. उपयोग उच्च पृथक "जावा डीबगर इंटरफेस" JDI
का प्रयोग करें

जेवीएम-टीआई के लिए मैं कुछ उपयोगी जानकारी ढूंढने में सक्षम था, लेकिन मुझे जेएनआई-डीएलएल लिखना होगा, कम से कम इस पल के लिए, मैं इससे बचना चाहूंगा। जेडीआई के साथ मैं जावा का उपयोग कर सकता हूं और ऐसा लगता है कि मैं इसे एप्लिकेशन के भीतर से उपयोग करने में सक्षम हूं। लेकिन मैं इसके लिए किसी प्रकार का ट्यूटोरियल या हाउटो नहीं ढूंढ पाया। जावा-डॉक्स http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ जो एकमात्र दस्तावेज मुझे मिल सकता था, वह बहुत उपयोगी नहीं था, क्योंकि यह मुझे इस वर्ग का उपयोग करने का तरीका नहीं दिखाता है।

तो, क्या किसी को एक अच्छा ट्यूटोरियल/पुस्तक पता है जिसे मैं पढ़ सकता हूं?

किसी भी मदद के लिए Thx!

उत्तर

1

क्या आपने दूरस्थ विकल्प पर विचार किया था? अर्थात। VisualVM

thead dump with visualVM http://java.sun.com/javase/6/docs/technotes/guides/visualvm/images/applications-window-menu.png

jps and jstack भी उपयोगी उपकरणों, JDK 5 में शामिल सभी मौजूदा धागे की स्टैक ट्रेस प्राप्त करने के लिए एक त्वरित आदेश पंक्ति विधि प्रदान करते हैं।

यह आलेख सुझाव देता है कि जेडीआई को remote tool के रूप में भी उपयोग किया जाता है।

इसलिए मुझे यकीन नहीं है कि आप अपने प्रोग्राम के भीतर एक थ्रेड डंप ट्रिगर कर सकते हैं, इसके बजाय आपको यूनिक्स प्लेटफॉर्म पर सिग्क्विट सिग्नल (मार -3) भेजने का एक तरीका मिल गया है, या यूनिक्स पर Ctrl- \ key दबाएं या विंडोज प्लेटफ़ॉर्म पर Ctrl-Break।

प्लस, JDI wasn't intended to be used to debug the same process in which the JDI client is running। अभी भी यह धागा जो मैंने अभी तक जुड़ा है वह सबसे नज़दीक है जिसे मैंने वास्तव में उसी कार्यक्रम के भीतर जेडीआई का उपयोग करने के लिए पाया है।

+0

धन्यवाद गतिरोध सहित जरूरत के बारे में मिलता है अब कम से कम मैं एक विशिष्ट मंच मैं कहाँ पूछ सकते हैं नहीं है! – BugSlayer

+0

आपका स्वागत है। यदि यह सबसे उपयोगी दृष्टिकोण है, तो इस उत्तर को स्वीकार करना न भूलें;) – VonC

+0

ध्यान दें कि jvisualvm कनेक्शन दृष्टिकोण केवल "अपने स्वयं के" JVM के लिए काम करता है और अन्य नहीं। इसमें विंडोज़ सेवा के रूप में चलने पर भी शामिल है। –

3

Thread.getAllStackTraces() का ही निष्पादन ट्रेस उदासीनता सभी धागे, लेकिन किसी विशेष धागे या लॉक द्वारा प्राप्त किए गए ऑब्जेक्ट लॉक की जानकारी नहीं देते हैं जिस पर एक विशेष धागा इंतजार कर रहा है। असल में, हम इसके साथ डेडलॉक्स को कम करने में सक्षम नहीं होंगे।

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