কিভাবে গ্রহন সহ স্প্রিং বুট অ্যাপ্লিকেশন ডিবাগ করবেন?


103

আমার Spring Bootওয়েবপ্যাপটি ঠিক চলছে, এবং আমি এটি গ্রহণের মাধ্যমে ডিবাগ করতে চাই।

সুতরাং আমার রিমোট জাভা অ্যাপ্লিকেশন ডিবাগারটি চালু করার সময়, আমার কোন বন্দরটি শোনা উচিত? এবং আমার ওয়েব অ্যাপে কি কোনও সেটিং আমাকে ডিবাগিং সক্ষম করতে সেট করতে হবে?


এসটিএসে 3.9.4. লিনাক্স মিন্টের পুরো স্ট্রাইতে 18 সারা আমাকে স্প্রিং বুট অ্যাপ্লিকেশনগুলি ডিবাগ করতে ডিবাগের দৃষ্টিভঙ্গিতে যেতে হবে।
টাইমট্র্যাপ

উত্তর:


168

আপনি কেন সঠিক main()পদ্ধতিটিতে ক্লিক করুন এবং নির্বাচন করবেন না "Debug As... Java Application"?


এটা ভাবিনি। আমি একটি বিশ্রামের অ্যাপটি পরীক্ষা করছি। এটি চালু হচ্ছে এবং তারপরে এটি বিভিন্ন ব্রাউজারে আমার ব্রাউজারে মারছে।
জেফএলএল

9
এমন একটি সময় রয়েছে যখন কোনও সার্ভারে দূরবর্তীভাবে চলমান অ্যাপ্লিকেশনটি ডিবাগ করার প্রয়োজন হতে পারে, যেখানে এটি প্রয়োগ হয় না।
কুগা

এটা আমার জন্য কাজ করে না। "সম্পাদক একটি প্রধান ধরণ ধারণ করে না"
রাজ

আমার ধারণা আপনি তখন "মূল () পদ্ধতিতে ডান ক্লিক করেননি"?
ডেভ সায়ার

4
আমার পরিস্থিতি একেবারে ভিন্ন ছিল, রানিং মেইন সরাসরি কয়েকটি স্প্রিং কনফিগারেশন ফাইল বা বুটস্ট্র্যাপ.এক্সএমএল তুলছিল না, তারপরে আমাকে এটিকে ম্যাভেন স্প্রিং-বুট: রান হিসাবে চালনা করতে হবে। তবে এটির সাথে সমস্যা হ'ল যদিও আপনি গ্রহন থেকে এই খাঁটি গোলটি চালাচ্ছেন এটি এটি ডিবাগ করবে না।
সানজয় পটেল

93

আছে অধ্যায় 19.2 স্প্রিং বুট রেফারেন্স মধ্যে আপনি দূরবর্তী ডিবাগ করা সমর্থন সক্ষমিত-র সাথে আপনার আবেদন শুরু ব্যাপারে বলে।

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

আপনি আপনার অ্যাপ্লিকেশন শুরু করার পরে কেবল চালনা / ডিবাগ কনফিগারেশনে সেই রিমোট জাভা অ্যাপ্লিকেশন কনফিগারেশন যুক্ত করুন, আপনার অ্যাপ্লিকেশন শুরু করার সময় আপনি যে পোর্ট / ঠিকানাটি নির্ধারণ করেছেন তা নির্বাচন করুন এবং তারপরে আপনি ডিবাগ করতে পারেন নিখরচায়।


এটি আমার পক্ষে কাজ করেছে। ধন্যবাদ! গ্রহণটি আমার বসন্ত বুট প্রকল্পটি ডিবাগ করতে পারেনি (মূল শ্রেণীর সন্ধান পাওয়া যায়নি এমন অভিযোগ রেখেছিলেন)।
ব্যবহারকারী 6123723

4
নোট করুন যে জাভা 8 এর সাথে (আমি অন্যান্য সংস্করণগুলি সম্পর্কে জানি না) চলমান java -agentlib:jdwp=helpবলছে "পুরানো-এক্সরঞ্জডডব্প ইন্টারফেসটি এখনও ব্যবহার করা যেতে পারে, তবে ভবিষ্যতে প্রকাশে অপসারণ করা হবে"। পরিবর্তে ব্যবহার করুন-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
পল

26

সহজ সমাধান:

টাইপ করার পরিবর্তে mvn spring-boot:run, কেবল টাইপ করুনmvnDebug spring-boot:run

আপনার এখনও প্রাসঙ্গিক বন্দরে "রিমোট জাভা অ্যাপ্লিকেশন" এর জন্য একটি নতুন ডিবাগ কনফিগারেশন তৈরি করে Eclipse এ ডিবাগারটি সংযুক্ত করতে হবে।


4
তারপরে আপনি কীভাবে ডিফল্ট নম্বর বাদে অন্য কোনও পোর্ট নম্বর নির্দিষ্ট করবেন?
স্টিফেন

19

এই কাজটি পেতে আমার রিমোট ডিবাগিং সেট আপ করার দরকার নেই, আমি মাভেনকে ব্যবহার করেছি।

  1. নিশ্চিত হয়ে নিন যে আপনার কাছে ম্যালেন প্লাগইনটি ইলিপসে ইনস্টল রয়েছে।
  2. ক্লিক করুন চালান> চালু করুন কনফিগারেশনগুলির> ম্যাভেন বিল্ড> নতুন লঞ্চ কনফিগারেশন :
    • বেস ডিরেক্টরি: আপনার প্রকল্পের মূলটিতে ব্রাউজ করুন
    • গোল: spring-boot::run
  3. প্রয়োগ ক্লিক করুন এবং তারপর রান ক্লিক করুন

এনবি। লাইন বাই লাইন ডিবাগিং করার সময় আপনার আইডিইতে যদি আপনার প্রকল্পের উত্স কোডটি খুঁজে পেতে সমস্যা হয় তবে এই এসও উত্তরটি একবার দেখুন হয়, তবে ডিবাগ অ্যাপ্লিকেশনটিতে কীভাবে আপনার উত্স কোডটি ম্যানুয়ালি সংযুক্ত করতে হয় তা জানতে ।

আশা করি এটি কাউকে সাহায্য করবে!


আপনি যদি স্প্রিং-বুট: রান দিয়ে সার্ভারটি চালান তবে আপনি কনসোল উইন্ডোতে কেবল রেড আইকন টিপে এটি থামাতে পারবেন না।
শৈলেশ প্রতাপ্বর

আমি এ জাতীয়ভাবে এটি বন্ধ করতে পারি (নেটস্ট্যাট অন্তর্ভুক্ত হওয়া দরকার হতে পারে, আমি ভুলে যাই যদি আমি একটি বাইনারি সজ্জিত করি বা সাইগউইনের সাথে এসেছি, বা এখন উইন্ডোগুলির একটি অংশ): নেটস্ট্যাট -ানো | গ্রেপ "9999" - উইন্ডোজ টাস্কিল / এফ / পিআইডি 36308
36of8

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। এই এসএসএইচ সেশনটি চলমান রাখুন।

এক্সিলিপ এ, টুলবার থেকে, চালান -> ডিবাগ কনফিগারেশনগুলি নির্বাচন করুন -> রিমোট জাভা অ্যাপ্লিকেশন নির্বাচন করুন -> নতুন বোতামটি ক্লিক করুন -> হোস্ট লোকালহোস্ট হিসাবে এবং পোর্ট 8002 হিসাবে (বা আপনার কাছে যা কিছু আছে ) হিসাবে নির্বাচন করুন আগে পদক্ষেপে কনফিগার করা)। প্রয়োগ করুন এবং তারপরে ডিবাগ ক্লিক করুন

এক্সিলিপ ডিবাগারটি এখন রিমোট সার্ভারের সাথে সংযুক্ত হওয়া উচিত। ডিবাগের দৃষ্টিভঙ্গিতে স্যুইচিংয়ের সাথে সংযুক্ত জেভিএম এবং এর থ্রেডগুলি প্রদর্শন করা উচিত। ব্রেকপয়েন্টগুলি দূরবর্তীভাবে ট্রিগার হওয়ার সাথে সাথেই গুলি চালানো উচিত।


পোর্ট ফরওয়ার্ডিং এবং টানেলিংটি আমার যে অনুপস্থিত ছিল তা ছিল। টা। আপনি যদি কোনও ইন্টারনেট ভিত্তিক সার্ভারে ডিবাগ করছেন তবে গুরুত্বপূর্ণ, অ্যামাজনে বলুন।
PaulNUK

15

কমান্ডের নীচে রান করুন যেখানে pom.xmlস্থাপন করা হয়েছে:

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

এবং আপনার দূরবর্তী জাভা অ্যাপ্লিকেশনটি পোর্টে ডিবাগিং বিকল্পের সাথে শুরু করুন5005


4
এটি কোনও ডিবাগার সংযুক্ত হওয়ার জন্য অপেক্ষা করতে ব্যর্থ হয় Spring Boot 2.0.3.RELEASE
স্টিফেন

12

আমার মতে সেরা সমাধানটি হল 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কমান্ডটি করতে পারে তবে তা দুর্দান্ত ।
স্টিফেন

4
@ স্টেফেন, এই কনফিগারেশনটি সম্ভবত কোনও নির্দিষ্ট প্রোফাইলে থাকা সহজ হওয়া উচিত
ডেভিডএক্সএক্সএক্সএক্স

4
  • আপনার প্রকল্পে ডান ক্লিক করুন এবং "যেমন হিসাবে ডিবাগ করুন> জাভা অ্যাপ্লিকেশন বা স্প্রিং বুট অ্যাপ্লিকেশন" চয়ন করুন - ক্যাপচার 1 - এখানে চিত্র বর্ণনা লিখুন
  • আপনি যদি চান যে আপনার অ্যাপ্লিকেশনটি কোথাও আপনার অ্যাপ্লিকেশন বিরতি দিয়ে বামদিকে ডাবল ক্লিক করুন আপনার কাছে এই ক্যাপচারটি 2 এর মতো হবে। এখানে চিত্র বর্ণনা লিখুন
  • তারপরে আপনি যখন আপনার অ্যাপ্লিকেশন শুরু করবেন তখন এগিয়ে যেতে সেই তীরগুলি ব্যবহার করুন ((ক্যাপচার 3) এখানে চিত্র বর্ণনা লিখুন

এটি শিরোনাম প্রশ্নের একটি ভাল উত্তর। তবে বর্ণনায় আরও নির্দিষ্ট এবং পৃথক প্রশ্ন রয়েছে, যার আলাদা উত্তর দরকার।
থার হোভডেন

সুতরাং আমি মাইএক্লিস্প এবং ডিবাগ হিসাবে ব্যবহার করতাম -> স্প্রিং বুট অ্যাপ বিকল্পটি উপলব্ধ ছিল এবং সূক্ষ্মভাবে কাজ করেছিল। আমি এক্লিপস অক্সিজেন ব্যবহার করছি না এবং স্প্রিং বুট অ্যাপ মেনু আইটেমটি আর উপলব্ধ নেই। এটি পাওয়ার জন্য আমার কি গ্রহগ্রহের জন্য একটি প্লাগইন ইনস্টল করতে হবে?
কচোস্টিকস

2

দয়া করে http://java.dzone.com/articles/how-debug-remote-java-applicat দেখুনরিমোট ডিবাগিং সক্ষম করতে । আপনি যদি অ্যাপ্লিকেশনটি চালানোর জন্য টোমক্যাট ব্যবহার করছেন তবে দূরবর্তী ডিবাগ প্যারামিটারগুলি দিয়ে টমক্যাট শুরু করুন বা নীচের কমান্ডটি ব্যবহার করে আপনি জেপিডিএ সমর্থন দিয়ে টমক্যাট শুরু করতে পারেন।

উইন্ডোজ

<tomcat bin dir>/startup.bat jpda

* নিক্স

<tomcat bin dir>/startup.sh jpda

এটি 8000 বন্দরে রিমোট ডিবাগিং সক্ষম করবে


2

গ্রহন বা অন্য কোনও আইডিই সহ, আপনার মূল বসন্ত বুট অ্যাপ্লিকেশনটিতে ডান ক্লিক করুন এবং "জাভা অ্যাপ্লিকেশন হিসাবে ডিবাগ করুন" ক্লিক করুন


2

এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে, তবে আমি স্প্রিংবুট + গ্রেডেল + জেহিস্টার, ডিবাগ করতে একই সমস্যা পেয়েছি,

বেশিরভাগ ক্ষেত্রে স্প্রিং বুট অ্যাপ্লিকেশন ডান ক্লিক এবং ডিবাগের সাহায্যে ডিবাগ করতে পারে তবে আপনি যখন কিছু অতিরিক্ত পরিবেশের প্যারামিটার সেটআপ রেখে গ্রেড ব্যবহার করেন তখন সরাসরি ডিবাগ করা সম্ভব হয় না।

এটি সমাধানের জন্য, Eclipse দূরবর্তী জাভা অ্যাপ্লিকেশন হিসাবে একটি অতিরিক্ত বৈশিষ্ট্য সরবরাহ করেছে

এই বৈশিষ্ট্যগুলি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনটি ডিবাগ করতে পারেন।

নীচের পদক্ষেপ অনুসরণ করুন:

./gradlew bootRun --debug-jvmকমান্ড দিয়ে আপনার গ্রেড অ্যাপ্লিকেশন চালান

এখন গ্রহনে যান -> ডান ক্লিক প্রকল্প এবং ডিবাগ কনফিগারেশন -> রিমোট জাভা অ্যাপ্লিকেশন।

আপনাকে স্থানীয় হোস্ট এবং পোর্ট হিসাবে 5005 হিসাবে হোস্ট এবং পোর্ট যুক্ত করুন (গ্রেড ডিবাগের জন্য ডিফল্ট, আপনি এটি পরিবর্তন করতে পারেন)

পড়ুন আরো বিস্তারিত এবং ধাপে জন্য।


2

Right click on the spring boot project -> debug as -> spring boot App। একটি ডিবাগার পয়েন্ট রাখুন এবং পোস্টম্যানের মতো ক্লায়েন্টের কাছ থেকে অ্যাপ্লিকেশনটি অনুরোধ করুন


0

স্প্রিং বুট অ্যাপ্লিকেশনগুলির প্রধান শ্রেণীর ফাইলটিতে ডান ক্লিক করুন -> বিকল্প হিসাবে ডিবাগ নির্বাচন করুন -> জাভা অ্যাপ্লিকেশন নির্বাচন করুন

এখানে চিত্র বর্ণনা লিখুন এখন আপনি অ্যাপ্লিকেশনটি ডিবাগ করতে ব্রেকপয়েন্টগুলি ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.