ग्रहण के साथ स्प्रिंग बूट एप्लिकेशन को कैसे डीबग करें?


100

मेरा Spring Bootवेबप अभी ठीक चल रहा है, और मैं इसे ग्रहण के माध्यम से डीबग करना चाहूंगा।

इसलिए जब मेरा रिमोट जावा एप्लिकेशन डीबगर लॉन्च होता है, तो मुझे किस पोर्ट को सुनना चाहिए? और क्या डिबगिंग को सक्षम करने के लिए मुझे अपने वेबएप पर कोई सेटिंग करनी है?


एसटीएस में 3.9.4. लिनक्स मिंट 18 सारा पर कृपया मुझे स्प्रिंग बूट एप्लिकेशन डीबग करने के लिए डीबग परिप्रेक्ष्य में जाना है।
टाइमट्रैप

जवाबों:


167

क्यों आप सिर्फ main()विधि पर क्लिक करें और चुनें नहीं है "Debug As... Java Application"?


ऐसा नहीं सोचा था। मैं एक बाकी ऐप का परीक्षण कर रहा हूं। इसे लॉन्च करना, और फिर इसे मेरे ब्राउज़र के साथ अलग-अलग कॉन्फ़िगरेशन से मारना।
जेफएलएल

8
ऐसे समय होते हैं जब किसी को सर्वर पर दूरस्थ रूप से चल रहे एप्लिकेशन को डीबग करना पड़ सकता है, जहां यह लागू नहीं होगा।
Cuga

यह मेरे लिए काम नहीं किया। "संपादक में एक मुख्य प्रकार शामिल नहीं है"
राज

मुझे लगता है कि आपने "मुख्य () विधि" पर राइट क्लिक नहीं किया है?
डेव सीर

4
मेरी स्थिति एक भिन्न थी, लेकिन रनिंग मेन सीधे कुछ वसंत विन्यास फाइल यानी बूटस्ट्रैप.xml नहीं उठा रही थी, तब मुझे इसे मावेन स्प्रिंग-बूट: रन के रूप में चलाने के लिए स्विच करना पड़ा। लेकिन इसके साथ समस्या यह है कि भले ही आप इस मावेन गोल को ग्रहण से चला रहे हों लेकिन यह इसे डिबग नहीं करेगा।
संजय पटेल

91

नहीं है अनुभाग 19.2 स्प्रिंग बूट संदर्भ में है कि आप दूरस्थ डीबगिंग समर्थन सक्षम के साथ अपने आवेदन शुरू करने के बारे में बताता है।

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
   -jar target/myproject-0.0.1-SNAPSHOT.jar

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


इसने मेरे लिए काम किया। धन्यवाद! एक्लिप्स मेरे स्प्रिंग बूट प्रोजेक्ट को डिबग नहीं कर सका (यह शिकायत करते हुए कि मुख्य वर्ग नहीं मिला)।
user6123723

4
ध्यान दें कि जावा 8 के साथ (मुझे अन्य संस्करणों के बारे में पता नहीं है) रनिंग java -agentlib:jdwp=helpस्टेट्स "पुराने -Xrunjdwp इंटरफ़ेस का उपयोग अभी भी किया जा सकता है, लेकिन भविष्य के रिलीज़ में हटा दिया जाएगा"। इसके बजाय उपयोग करें-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
पॉल

23

आसान समाधान:

टाइप करने के बजाय mvn spring-boot:run, बस टाइप करेंmvnDebug spring-boot:run

आपको संबंधित पोर्ट पर "रिमोट जावा एप्लिकेशन" के लिए एक नया डीबग कॉन्फ़िगरेशन बनाकर एक्लिप्स में डिबगर को संलग्न करना होगा।


3
फिर आप डिफ़ॉल्ट एक के अलावा अन्य पोर्ट नंबर कैसे निर्दिष्ट करेंगे?
स्टीफन

19

मुझे यह काम करने के लिए दूरस्थ डिबगिंग सेट करने की आवश्यकता नहीं थी, मैंने मावेन का उपयोग किया।

  1. सुनिश्चित करें कि आपके पास ग्रहण में मावेन प्लगइन स्थापित है।
  2. क्लिक करें भागो> चलाएँ विन्यास> Maven बिल्ड> नई लांच विन्यास :
    • आधार निर्देशिका: अपने प्रोजेक्ट के मूल में ब्राउज़ करें
    • लक्ष्य: spring-boot::run
  3. अप्लाई पर क्लिक करें फिर रन पर क्लिक करें

एनबी। यदि आपके IDE को लाइन-बाय-लाइन डीबगिंग करते समय आपके प्रोजेक्ट के स्रोत कोड को खोजने में समस्याएं हैं, तो यह जानने के लिए इस SO उत्तर पर एक नज़र डालें कि अपने स्रोत कोड को डिबग एप्लिकेशन पर मैन्युअल रूप से कैसे संलग्न करें।

आशा है कि यह किसी की मदद करता है!


यदि आप सर्वर को स्प्रिंग-बूट के साथ चलाते हैं: चलाते हैं, तो आप इसे कंसोल विंडो में सिर्फ लाल आइकन दबाकर नहीं रोक पाएंगे।
शैलेश प्रतापवार

मैं इसे ऐसे ही रोक सकता हूं (नेटस्टैट की आवश्यकता हो सकती है, मैं भूल जाता हूं कि क्या मैंने एक द्विआधारी को डुबोया या साइगविन के साथ आया था, या अब खिड़कियों का हिस्सा है): netstat -ano | grep "9999" - विंडोज टास्ककिल / F / PID 36308 में 36308 टास्क आईडी
सेनाऑफ्डा 12mnkeys

19

कैसे एक दूरस्थ मंचन या उत्पादन स्प्रिंग बूट आवेदन डिबग करने के लिए

सर्वर साइड

मान लें कि आपने अपने स्प्रिंग बूट एप्लिकेशन को एक सेवा के रूप में स्थापित करने पर स्प्रिंग बूट के गाइड का सफलतापूर्वक पालन किया है । /srv/my-app/my-app.warकॉन्फ़िगरेशन फ़ाइल के साथ आपका अनुप्रयोग विरूपण साक्ष्य रहता है /srv/my-app/my-app.conf:

# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.

JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging

जब आप अपने स्प्रिंग बूट एप्लिकेशन को sudo service my-app restartफिर से शुरू करते हैं , तो उसके लॉग फ़ाइल में स्थित /var/log/my-app.logएक लाइन कहनी चाहिए Listening for transport dt_socket at address: 8002

क्लाइंट-साइड (डेवलपर मशीन)

सर्वर के लिए SSH पोर्ट-फ़ॉरवर्डिंग टनल खोलें ssh -L 8002:localhost:8002 myusername@staging.example.com:। इस SSH सत्र को चालू रखें।

उपकरण पट्टी से ग्रहण में, चलाएँ -> डिबग कॉन्फ़िगरेशन का चयन करें -> दूरस्थ जावा अनुप्रयोग का चयन करें -> नया बटन क्लिक करें -> कनेक्शन प्रकार मानक (सॉकेट अटैच) , होस्ट लोकलहोस्ट के रूप में, और पोर्ट 8002 (या आपके पास जो भी हो) का चयन करें। पहले के चरणों में कॉन्फ़िगर किया गया है)। अप्लाई पर क्लिक करें और फिर डीबग करें

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


पोर्ट फ़ॉरवर्डिंग और टनलिंग बिट मैं गायब था। टा। यदि आप इंटरनेट आधारित सर्वर से डिबगिंग कर रहे हैं, तो अमेज़न पर कहें।
पॉलएनयूके

14

जहां pom.xmlरखा गया है, वहां से नीचे चलाएं :

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

और पोर्ट पर डिबगिंग विकल्प के साथ अपना रिमोट जावा एप्लिकेशन शुरू करें5005


2
यह डिबगर को संलग्न करने के लिए प्रतीक्षा करने में विफल रहता है Spring Boot 2.0.3.RELEASE
स्टीफन

10

मेरी राय में सबसे अच्छा समाधान pom.xml में एक प्लगइन है, और आपको हर समय कुछ और करने की आवश्यकता नहीं है:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

लेकिन फिर कमांड mvn clean installडिबगर को चालू करता है और बिल्ड हैंग हो जाता है। यह अच्छा होगा यदि केवल mvnDebug clean installकमांड ऐसा करेगी।
स्टीफन

1
@ स्टेफ़ेन, यह कॉन्फ़िगरेशन संभवत: एक विशिष्ट प्रोफ़ाइल में होना चाहिए, जो सक्षम हो
davidxxx

4
  • अपनी परियोजना पर राइट क्लिक करें और "डीबग अस => जावा एप्लिकेशन या स्प्रिंग बूट ऐप" चुनें -capture1 - यहां छवि विवरण दर्ज करें
  • यदि आप चाहते हैं कि आपके एप्लिकेशन को आपके एप्लिकेशन में कहीं और रोकें तो बाईं ओर डबल क्लिक करें आपको यह कैप्चर 2 पसंद आएगा। यहां छवि विवरण दर्ज करें
  • तब जब आप अपना ऐप शुरू करते हैं तो अगले तीर का उपयोग करें। (कैप्चर 3) यहां छवि विवरण दर्ज करें

यह शीर्षक प्रश्न का एक अच्छा उत्तर है। हालांकि, विवरण में एक अधिक निर्दिष्ट और अलग प्रश्न है, जिसके लिए एक अलग उत्तर की आवश्यकता होती है।
थोर होवदेन

इसलिए मैंने MyEclispe और Debug As का उपयोग किया -> स्प्रिंग बूट ऐप विकल्प उपलब्ध था और ठीक काम किया। मैं ग्रहण ऑक्सीजन का उपयोग नहीं कर रहा हूं और स्प्रिंग बूट ऐप मेनू आइटम अब उपलब्ध नहीं है। क्या मुझे इसे प्राप्त करने के लिए ग्रहण के लिए एक प्लगइन स्थापित करने की आवश्यकता है?
कचोपस्टिक्स

3

Right click on the spring boot project -> debug as -> spring boot App। डिबगर बिंदु डालें और डाकिया जैसे ग्राहक से ऐप को आमंत्रित करें


2

दूरस्थ डीबगिंग को सक्षम करने के लिए कृपया http://java.dzone.com/articles/how-debug-remote-java-applicat देखें । यदि आप अपने एप्लिकेशन को चलाने के लिए टॉमकैट का उपयोग कर रहे हैं, तो रिमोट डिबग पैरामीटर के साथ टॉमकैट शुरू करें या आप निम्न आदेश का उपयोग करके जेपीडीए समर्थन के साथ टॉमकैट शुरू कर सकते हैं।

खिड़कियाँ

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

यह पोर्ट 8000 पर दूरस्थ डिबगिंग को सक्षम करेगा


2

ग्रहण या किसी अन्य आईडीई के साथ, अपने मुख्य स्प्रिंग बूट एप्लिकेशन पर बस राइट क्लिक करें और "डीवाग को जावा एप्लिकेशन" के रूप में क्लिक करें


2

इस सवाल का जवाब पहले से ही है, लेकिन मुझे भी स्प्रिंगबूट + ग्रेड + जिपर, डिबग करने के लिए एक ही मुद्दा मिला,

ज्यादातर स्प्रिंग बूट एप्लिकेशन राइट क्लिक और डीबग द्वारा डिबग कर सकते हैं, लेकिन जब आप ग्रेडेल का उपयोग करते हैं, तो कुछ अतिरिक्त पर्यावरण पैरामीटर सेटअप होता है, तो सीधे डिबग करना संभव नहीं है।

इसे हल करने के लिए, एक्लिप्स ने रिमोट जावा एप्लिकेशन के रूप में एक अतिरिक्त सुविधाएं प्रदान कीं

इस सुविधाओं का उपयोग करके आप अपने एप्लिकेशन को डीबग कर सकते हैं।

नीचे दिए गए चरण का अनुसरण करें:

./gradlew bootRun --debug-jvmकमांड के साथ अपना gradle एप्लिकेशन चलाएं

अब ग्रहण पर जाएं -> राइट क्लिक प्रोजेक्ट और डिबग कॉन्फ़िगरेशन -> रिमोट जावा एप्लीकेशन।

आपको होस्ट और पोर्ट को लोकलहोस्ट के रूप में और पोर्ट को 5005 के रूप में जोड़ें (ग्रेडेल डीबग के लिए डिफ़ॉल्ट, आप इसे बदल सकते हैं)

अधिक विवरण और चरण के लिए देखें


0

स्प्रिंग बूट एप्लिकेशन मुख्य कक्षा फ़ाइल पर राइट क्लिक करें -> विकल्प के रूप में डीबग का चयन करें -> जावा एप्लिकेशन चुनें

यहां छवि विवरण दर्ज करें अब आप एप्लिकेशन को डीबग करने के लिए ब्रेकप्वाइंट का उपयोग कर सकते हैं।

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