JVM को दूरस्थ रूप से डीबग करने की अनुमति देने के लिए जावा कमांड लाइन विकल्प क्या हैं?


321

मुझे पता है कि JAVA_OPTSजावा प्रोग्राम को दूरस्थ रूप से डिबग करने के लिए कुछ सेट करना होगा।

वे क्या हैं और उनका क्या मतलब है?

जवाबों:


303

मेरे पास यह लेख जावा 5 और नीचे के लिए इसे स्थापित करने पर बुकमार्क है।

मूल रूप से इसके साथ चलाएं :

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044

के लिए ऊपर जावा 5 और , इसके साथ चलाएँ:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044

19
उल्लेख के लायक है कि आप अपने पते को कॉन्फ़िगर करना चाहते हैं जैसे *:1044किसी भी कंप्यूटर से दूरस्थ डिबगिंग को सक्षम करने के लिए
Herr Derb

6
HerrDerb सही है .. चूंकि जावा 9 "एड्रेस = 1044" हमेशा सभी इंटरफेस पर नहीं सुन रहा है। "पता = *: 1044" जावा 9+ को जावा 8 की तरह व्यवहार करता है ...
alfonx

459

जावा 5.0 से पहले, उपयोग -Xdebugऔर -Xrunjdwpतर्क। ये विकल्प अभी भी बाद के संस्करणों में काम करेंगे, लेकिन यह जेआईटी के बजाय व्याख्या किए गए मोड में चलेगा, जो धीमा होगा।

जावा 5.0 से, -agentlib:jdwpएकल विकल्प का उपयोग करना बेहतर है :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044

-Xrunjdwpया agentlib:jdwpतर्क पर विकल्प हैं:

  • transport=dt_socket : जेवीएम से कनेक्ट करने के लिए जिस तरह से उपयोग किया जाता है (सॉकेट एक अच्छा विकल्प है, इसका उपयोग दूर के कंप्यूटर को डीबग करने के लिए किया जा सकता है)
  • address=8000 : टीसीपी / आईपी पोर्ट उजागर, डिबगर से कनेक्ट करने के लिए,
  • suspend=y : यदि 'y', JVM को तब तक प्रतीक्षा करने के लिए कहें जब तक डिबगर निष्पादन शुरू करने के लिए संलग्न नहीं हो जाता है, अन्यथा (यदि 'n'), तुरंत निष्पादन शुरू करता है।

7
आप बिल्कुल सही हैं .. मैंने -Xdebug और -rrunjdwp के साथ कोशिश की, लेकिन यह काम नहीं किया। जब मैंने -runjdwp या Agentlib के साथ कोशिश की : jdwp यह काम कर रहा है। (जावा 7 पर)
रोबोएलेक्स

यह केवल मेरे लिए काम करता है जब मैंने इसके चारों ओर उद्धरण डाल दिया, अन्यथा मुझे यह त्रुटि मिली: त्रुटि: JDWP गैर-सर्वर परिवहन dt_socket सर्वर = y सस्पेंड = y पता = 8000 में एक कनेक्शन पता होना चाहिए जो 'पते' = विकल्प के माध्यम से निर्दिष्ट किया जाना चाहिए
रिंग

1
है Xrunjdwpपदावनत (या हटा दिया?) क्यों हम चुनेंगे agentlib:jdwpइस पर?
आर्टऑफवर्फ

2
मुझे लगता है आप ग़लत हैं। -Xdebug -Xrunjdwpमावेन परियोजनाओं को डीबगिंग करते समय नेटबीन्स का उपयोग किया जाता है, और वे ऐसे दौड़ते हैं जैसे वे JITed हैं।
अलेक्सांद्र डबिन्सकी

78

चूंकि Java 9.0 JDWP डिफ़ॉल्ट रूप से केवल स्थानीय कनेक्शन का समर्थन करता है। http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

दूरस्थ डिबगिंग के लिए किसी को *:पता के साथ कार्यक्रम चलाना चाहिए :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000

1
इसे और अधिक बढ़ाना चाहिए, क्योंकि यह एक महत्वपूर्ण संकेत है जो सभी नए जावा संस्करणों पर लागू होता है।
सेबस्टियन एस

1
बस एक नोट बनाना: ओरेकल लिंक का कहना है कि यह उसी पुराने व्यवहार को प्राप्त करेगा, लेकिन यह सुरक्षित नहीं है और अनुशंसित नहीं है।
चांसोक ओह

9

जावा 1.5 या अधिक के लिए:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

जावा 1.4 के लिए:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

जावा 1.3 के लिए:

java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

यहाँ एक साधारण प्रोग्राम से आउटपुट है:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled

5

जावा

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar

address उस पोर्ट को निर्दिष्ट करता है जिस पर वह डिबग करने की अनुमति देगा

Maven

** मावेन के साथ डिबग स्प्रिंग बूट ऐप:

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"

2

यहां सबसे आसान उपाय है।

यदि आप मावेन का उपयोग कर रहे हैं तो बहुत सारे पर्यावरण विशेष कॉन्फ़िगरेशन की आवश्यकता है। इसलिए, यदि आप मावेन से अपना कार्यक्रम शुरू करते हैं, तो mvnDebugइसके बजाय केवल कमांड चलाएं mvn, यह आपके ऐप को दूरस्थ डिबगिंग कॉन्फ़िगर करने के साथ शुरू करने का ध्यान रखेगा। अब आप केवल पोर्ट 8000 पर डिबगर संलग्न कर सकते हैं।

यह आपके लिए पर्यावरण की सभी समस्याओं का ध्यान रखेगा।


1

कमांड लाइन

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=PORT_NUMBER

Gradle

gradle bootrun --debug-jvm

Maven

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

यहां हम सिर्फ एक सॉकेट अटैचिंग कनेक्टर का उपयोग करते हैं, जो कि डिफ़ॉल्ट रूप से सक्षम है जब dt_socket ट्रांसपोर्ट कॉन्फ़िगर किया गया है और VM सर्वर डिबगिंग मोड में चल रहा है।

अधिक जानकारी के लिए यू का उल्लेख कर सकते हैं: https://stackify.com/java-remote-debugging/

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