डिबग तर्कों के साथ JVM शुरू किए बिना एक जावा एप्लिकेशन को डीबग करें


96

डिबगर को आम तौर पर एक रनिंग jvm में संलग्न करने के लिए, आपको jvm को निम्न जैसे तर्कों के साथ शुरू करने की आवश्यकता होगी:

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

अब अगर मैं एक ऐसी प्रक्रिया को डिबग करना चाहता हूं जो डिबग मोड में शुरू नहीं हुई थी, तो मैं क्या कर सकता हूं?

यह स्थिति तब उत्पन्न होती है जब एक उत्पादन प्रणाली (यानी डिबग आर्गन्स के बिना शुरू की गई) एक 'यादृच्छिक' प्रदर्शित करती है (मैं ढीले शब्द का उपयोग करता हूं)। इसलिए मैं jvm को उचित तर्कों के साथ फिर से शुरू नहीं कर सकता, क्योंकि कोई भी नहीं जानता कि बग को फिर से कैसे बनाया जाए। क्या इस स्थिति में जेवीएम से जुड़ना असंभव है?

बस यह स्पष्ट करना संभव नहीं है कि पहले से चल रहे जेवीएम को संलग्न करने के लिए जेडीबी जैसे उपकरणों का उपयोग करना संभव नहीं है, जब तक कि वे डिबेट में शुरू नहीं हुए थे

JVM मैन पेज से

Jdb का उपयोग करने का एक अन्य तरीका इसे पहले से चल रहे जावा वीएम से जोड़कर है। एक VM जिसे jdb के साथ डिबग किया जाना है, उसे निम्नलिखित विकल्पों के साथ शुरू किया जाना चाहिए:


जवाबों:


48

आप डिबग सर्वर को प्रक्रिया से जोड़ने के लिए jsadebugd ( JDK ) का उपयोग करने में सक्षम हो सकते हैं (Windows के लिए डिबगिंग टूल के साथ विंडोज पर उपलब्ध है )। इसे प्रायोगिक के रूप में चिह्नित किया गया है, इसलिए आप इसे पहले एक परीक्षण मशीन पर आज़माना चाहते हैं।

उपयोग:

jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

कनेक्टर नाम withe arg का उपयोग करके पाया जा सकता है jdb -listconnectors


1
मैं linux का उपयोग कर रहा हूँ, इसलिए यह सबसे आशाजनक समाधान प्रतीत होता है
hhafez

इसके साथ साझा करने के लिए कोई अनुभव?
थोरबजोरन रावन एंडरसन

1
मेरा अनुभव यह है कि इसने कई बार अच्छी तरह से काम किया जिसकी मुझे आवश्यकता थी, इस बीच सॉफ्टवेयर के सभी कारखाने उदाहरणों में डिफ़ॉल्ट रूप से jvm डीबग विकल्पों के साथ लॉन्च करने के लिए कॉन्फ़िगर नहीं किए गए हैं ताकि हम समर्थित विधि का उपयोग कर सकें।
हफीज

जावा 11 jsadebugdद्वारा प्रतिस्थापित किया गया था jhsdb debugd। तो वह बन जाता है jhsdb debugd --pid <pid>एक बात प्रस्तुत स्लाइड्स में देखें jddb और jhsdb के लिए दस्तावेज़
Delthas

ऐसा लगता है कि SADebugServerAttachingConnectorइसे भी हटा दिया गया था jdb, और मुझे लगता है कि प्रतिस्थापन होना चाहिए jhsdb hsdb/ jhsdb clhsdb। मैं किसी भी डॉक्स को नहीं दे सकता कि क्या तर्क देना है jhsdb clhsdb
प्रातः

32

केवल यह स्पष्ट करने के लिए कि पहले से चल रहे JVM>> को संलग्न करने के लिए jdb जैसे उपकरणों का उपयोग करना संभव नहीं है, जब तक कि वे डिबग मोड में शुरू नहीं किए गए थे।

soviet russia स्रोत में आप पढ़ते हैं

jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426

1
अच्छी तरह से "समर्थित" उत्तर है, लेकिन प्रयोगात्मक उत्तर वह है जिसे मैंने स्वीकार किया है, इसलिए इसे एक असमर्थित
आक्रमण

7

VisualVM एक डिबगर नहीं है, लेकिन आप थ्रेड डंप और ढेर डंप से प्राप्त कर सकते हैं जो कुछ समस्याओं के निदान में उपयोगी हो सकता है। सबसे उपयोगी विशेषताओं में जेवीएम 5 या 6 की आवश्यकता होती है।


लिंक काम नहीं करता है .... हो सकता है कि आप https: // से पहले http: // को हटा दें ... मैं होता लेकिन अभी तक पर्याप्त प्रतिष्ठा नहीं है
न्यूटोपियन

+1 VisualVM वास्तव में दिलचस्प लगता है। BTW: लिंक अब तय हो गया है।
sleske

5

jstack (डेडलॉक के मामले में उपयोगी) या btrace VisualVM प्लगइन का उपयोग भी कर सकता है


-5

आप हमेशा हाथ से jdb और डिबग का उपयोग कर सकते हैं: P


2
मैं हमेशा सोचता था कि आप jdb के साथ jvm को संलग्न नहीं कर सकते जब तक कि jvm को डिबग कनेक्शन की अनुमति देने के साथ शुरू नहीं किया गया था क्या मैं गलत हूं?
हफीज

जहाँ तक मैं समझता हूँ, आपके द्वारा बताया गया विकल्प आपके "जावा" कमांड (VM) के दूरस्थ डिबग को "सक्षम" करना है, लेकिन आप इसके बजाय jdb कमांड का उपयोग भी कर सकते हैं। इसलिए java MyApp के बजाय आप jdb MyApp (और अंतःक्रियात्मक रूप से डिबग, सेट ब्रेकप्वाइंट, रन, स्टॉप, वॉच, इत्यादि) पर जाएं
OscarRyz

1
मुझे नहीं लगता है कि jdb मैन पेज के अनुसार यह सही है - उद्धरण शुरू करें jdb का उपयोग करने का एक और तरीका इसे जावा वीएम से जोड़कर है जो पहले से चल रहा है। VM जिसे jdb के साथ डिबग किया जाना है, उसे निम्नलिखित विकल्पों के साथ शुरू किया जाना चाहिए: - अंत उद्धरण
hhafez

सही कनेक्टर (अभी के लिए असमर्थित) के साथ jdb एक रनिंग प्रक्रिया से जुड़ सकता है।
थोरबजोरन रेव एंडरसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.