একটি জাভা অ্যাপ্লিকেশন রিমোট ডিবাগিং


254

আমার একটি জাভা অ্যাপ্লিকেশন লিনাক্স মেশিনে চলছে। আমি জাভা অ্যাপ্লিকেশনটি নিম্নলিখিতটি ব্যবহার করে চালাচ্ছি:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

আমি এই লিনাক্স মেশিনে টিসিপির জন্য 4000 পোর্ট খুলেছি। আমি উইন্ডোজ এক্সপি মেশিন থেকে গ্রহণ গ্রহণ এবং এই অ্যাপ্লিকেশন সাথে সংযোগ করার চেষ্টা করি। আমি উইন্ডোতেও পোর্টটি খুলেছি।

দুটি মেশিনই ল্যানে রয়েছে তবে আমি ডিবাগারটি জাভা অ্যাপ্লিকেশনটির সাথে সংযুক্ত করার মতো দেখতে পাচ্ছি না। আমি কি ভুল করছি?




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

উত্তর:


476

সম্পাদনা: আমি লক্ষ্য করেছি যে কিছু লোক এখানে নিমন্ত্রণটি কেটে কাটাচ্ছে। আমি যে উত্তরটি প্রাথমিকভাবে দিয়েছি তা কেবল ওপি-র জন্য প্রাসঙ্গিক। এখানে আরও একটি আধুনিক অনুরোধ শৈলী (8000 এর বেশি প্রচলিত বন্দর ব্যবহার সহ):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

আসল উত্তর অনুসরণ।


এটা চেষ্টা কর:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

এখানে দুটি পয়েন্ট:

  1. কোন ফাঁকা জায়গা runjdwpবিকল্পে ।
  2. শ্রেণীর নামের আগে বিকল্পগুলি আসে। শ্রেণীর নামের পরে আপনার যে কোনও যুক্তি হ'ল আপনার প্রোগ্রামে যুক্তি!


2
@ ডিজেগুম্মিকুহ সুন্দর! -agentlibআপনার কাটিং-পেস্ট করার আনন্দের জন্য আমি নতুন-স্টাইল বিকল্পটি ব্যবহার করতে পোস্টটি আপডেট করেছি । :-)
ক্রিস জেস্টার-ইয়াং

আমরা মেশিন যেখানে রিমোট ডিবাগিং করি সেখানে রিমোট অ্যাপটি উপস্থিত থাকার জন্য কি আমাদের সর্বদা উত্স কোড থাকা দরকার?
মাস্টারজয়ে

আপনাকে করার প্রয়োজন জানেন সোর্স কোড। হয় আপনার কাছে। জাভা ফাইল রয়েছে বা আপনার কাছে .jar / .class ফাইলগুলি ডিকম্পিলারের সাথে একত্রিত হয়েছে। আইডিই যেমন Eclipse এর JDecompiler এর মতো একটি ডিসকোপাইলার থাকতে পারে যাতে আপনি .class ফাইলটি ডিবাগ করতে পারেন যেন এটি কোনও জাভা ফাইল (মন্তব্যগুলি বাদ দিয়ে)।
ইভান সাতরিয়া

1
এই স্ট্যাকওভারফ্লো.com/ a/ 138518 / 500902 থেকে একটি মন্তব্য পুনরাবৃত্তি করা , "যেহেতু জাভা 9" ঠিকানা = 1044 "সবসময় সমস্ত ইন্টারফেসে শোনে না" "ঠিকানা = *: 1044" জাভা 9+ এর সাথে জাভা 8 এর মতো আচরণ করে " বিভিন্ন হোস্ট থেকে ডিবাগ করার অনুমতি দিন
মার্ভিন

84

জেডিকে ১.৩ বা তার আগের:

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

জেডিকে 1.4 এর জন্য

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

আরও নতুন জেডিকে:

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

আপনার প্রয়োজনের উপর ভিত্তি করে পোর্ট নম্বর পরিবর্তন করুন।

জাভা প্রযুক্তি থেকে

5.0 এর পরে -agentlib: jdwp বিকল্পটি JDWP এজেন্টের লোড করতে এবং বিকল্পগুলি নির্দিষ্ট করতে ব্যবহৃত হয়। 5.0 এর পূর্বে রিলিজের জন্য -Xdebug এবং -rrunjdwp বিকল্পগুলি ব্যবহার করা হয় (5.0 বাস্তবায়ন -Xdebug এবং -Xrunjdwp বিকল্পকে সমর্থন করে তবে নতুন -agentlib: jdwp বিকল্পটি জেএমএম টিআই ইন্টারফেসটি জেডিএমপি টিআই ব্যবহার করে) পুরানো জেভিএমডিআই ইন্টারফেসের চেয়ে ভিএম)

আরও একটি বিষয় লক্ষণীয়, জেভিএম সরঞ্জাম ইন্টারফেস ডকুমেন্টেশন থেকে :

জেভিএম টিআই জেডিকে 5.0 এ চালু হয়েছিল। জেভিএম টিআই জাভা ভার্চুয়াল মেশিন প্রোফাইলার ইন্টারফেস (জেভিএমপিআই) এবং জাভা ভার্চুয়াল মেশিন ডিবাগ ইন্টারফেস (জেভিএমডিআই) প্রতিস্থাপন করে, যা জেডিকে of হিসাবে আর সরবরাহ করা হয় না।


অন্ধকার এর ডিফল্ট সেটিংসে নিম্নলিখিত কাজগুলো করেনঃ -agentlib: jdwp = পরিবহন = dt_socket, সার্ভার = Y, ঠিকানা = 8000
ফলের টুকুরা

29

পদক্ষেপ:

  1. উপরের পোস্টে যেমনটি বলা হয়েছে তেমনই ডিবাগিং বিকল্পগুলি সহ আপনার দূরবর্তী জাভা অ্যাপ্লিকেশনটি শুরু করুন।
  2. হোস্ট এবং পোর্ট নির্দিষ্ট করে রিমোট ডিবাগিংয়ের জন্য Eclipse কনফিগার করুন।
  3. Eclipse এ রিমোট ডিবাগিং শুরু করুন এবং সংযোগ সফল হওয়ার জন্য অপেক্ষা করুন।
  4. ব্রেকপয়েন্ট এবং ডিবাগ সেটআপ করুন।
  5. আপনি যদি অ্যাপ্লিকেশন শুরু থেকে ডিবেগ করতে চান তবে সাসপেন্ড = y ব্যবহার করুন, এটি আপনাকে গ্রহন থেকে সংযুক্ত না হওয়া পর্যন্ত দূরবর্তী অ্যাপ্লিকেশন স্থগিত রাখবে।

দেখুন জাভা দূরবর্তী ডিবাগিং ধাপে নির্দেশিকা দ্বারা ধাপ সম্পূর্ণ বিবরণের জন্য।


16

জাভা coveringাকা উত্তর> = 9:

জাভা 9+ এর জন্য, জেভিএম হোস্টিং মেশিনের আইপি ঠিকানার সাথে ঠিকানাটি উপসর্গের মাধ্যমে JVM বিকল্পটির কিছুটা পরিবর্তন প্রয়োজন, বা ঠিক *:

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

এটি https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 এ উল্লিখিত পরিবর্তনের কারণে ।

জাভা <9 এর জন্য, পোর্ট নম্বর সংযোগ করার জন্য যথেষ্ট।


8

আমি জোর দিতে চাই যে যুক্তির ক্রমটি গুরুত্বপূর্ণ

আমার জন্য java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jarকমান্ড ডিবাগার পোর্ট খুলবে ,

কিন্তু java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000কমান্ড না


3
আমি অনুমান করব কারণ এটি আপনার দ্বিতীয় উদাহরণে, "অ্যাপ.জার" এর পরে সমস্ত কিছু আপনার মূল পদ্ধতিতে যুক্তি হিসাবে পাস করা হয়েছে
xoX Zeus Xox

@ xoXZeusXox ha ha। হ্যাঁ, এটি আর্গুমেন্ট হিসাবে পাস হয়েছে। উল্লেখ করার জন্য ধন্যবাদ।
মিঃব্ল্যাক

1

রিমোট ডিবাগিংয়ের জন্য আপনার এভাবেই Eclipse Debugger সেটআপ করা উচিত:

গ্রহণের সেটিংস:

1. রান বাটনে ক্লিক করুন
2. ডিবাগ কনফিগারেশন নির্বাচন করুন
3. "রিমোট জাভা অ্যাপ্লিকেশন" নির্বাচন করুন
4. নতুন কনফিগারেশন

  • নাম: গেটওয়েপোর্টালপ্রজেক্ট
  • প্রকল্প: গেটওয়েপোর্টাল-পোর্টলেট
  • সংযোগের ধরণ: সকেট সংযুক্তি
  • সংযোগের বৈশিষ্ট্য: i) লোকালহোস্ট ii) 8787

জেবস এর জন্য:

1. /path/toJboss/jboss-eap-6.1/bin/standalone.confআপনার ভিএম- এ নিম্নলিখিত পরিবর্তন করুন: # টি অপসারণ করে নিম্নলিখিত লাইনটি কমেন্ট করুন :

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

টমক্যাটের জন্য:

ইন catalina.bat ফাইল:

ধাপ 1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

ধাপ ২:

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

পদক্ষেপ 3: নীচের মত কমান্ড প্রম্পট থেকে টমক্যাট চালান:

catalina.sh jpda start

তারপরে আপনার জাবা ক্লাসে ব্রেকবয়েন্টগুলি সেট করা দরকার যা আপনি ডিবাগ করতে চান।


জাভা 8-এ জেডিকে একটি জাভাআলসিএলএলপিওপিটিএস এনভায়রনমেন্ট ভেরিয়েবল সমর্থন করে যাতে আপনার যে কোনও জাভা অ্যাপ্লিকেশনটির জন্য ডিবাগারটি ব্যবহার করা দরকার তা সক্ষম করতে: JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n সম্পাদনাগুলির জন্য পিএস দুঃখিত, বিন্যাসকের সাথে লড়াই করে।
নাথান নিসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.