سؤال

لدي تطبيق Java يعمل على آلة Linux. أركض تطبيق Java باستخدام ما يلي:

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

لقد فتحت منفذ 4000 ل TCP على جهاز Linux هذا. يمكنني استخدام Eclipse من جهاز Windows XP وحاول الاتصال بهذا التطبيق. لقد فتحت المنفذ في Windows أيضا.

كلا الجهازين على الشبكة المحلية، لكنني لا أستطيع ربط مصحح الأخطاء في تطبيق Java. ما الخطأ الذي افعله؟

هل كانت مفيدة؟

المحلول

تعديل: لقد لاحظت أن بعض الناس يقطعون ولصق الاحتجاج هنا. كانت الإجابة التي أعطيتها في الأصل ذات صلة بالبرنامج المرئي فقط. إليك أسلوب استدعاء أكثر حداثة (بما في ذلك استخدام المنفذ الأكثر تقليدية قدره 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. الخيارات تأتي قبل اسم الفصل. أي حجج لديك بعد اسم الفصل هي حجج إلى برنامجك!

نصائح أخرى

ل JDK 1.3 أو سابقا:

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

ل JDK 1.4.

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

بالنسبة إلى JDK الأحدث:

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

يرجى تغيير رقم المنفذ بناء على احتياجاتك.

من عند تقنيات جافا

من 5.0 فصاعدا، يتم استخدام خيار JDWP لتحميل وتحديد خيارات وكيل JDWP. بالنسبة للإصدارات قبل 5.0، يتم استخدام خيارات -xdebug و -xrunjdwp (تطبيق 5.0 يدعم أيضا خيارات -xdebug و -xrunjdwp، ولكن خيار Newer -AgentLib: JDWP هو الأفضل كما يستخدم وكيل JDWP في 5.0 واجهة JVM TI ل VM بدلا من واجهة JVMDI القديمة)

شيء آخر يجب ملاحظته، من توثيق واجهة أداة JVM:

تم تقديم JVM TI في JDK 5.0. يحل JVM TI محل واجهة Java Virtual Machine Profiler (JVMPI) وواجهة تصحيح الجهاز الظاهري Java (JVMDI) والتي لم تعد توفرها، اعتبارا من jdk 6،.

خطوات:

  1. ابدأ تشغيل تطبيق Java البعيد الخاص بك بخيارات تصحيح الأخطاء كما قال في المنشور أعلاه.
  2. تكوين الكسوف للحصول على تصحيح الأخطاء عن طريق تحديد المضيف والمنفذ.
  3. بدء تشغيل التصحيح عن بعد في الكسوف وانتظر الاتصال بالنجاح.
  4. إعداد نقطة توقف وتصحيح.
  5. إذا كنت ترغب في تصحيح بدء تشغيل التطبيق، استخدم Suspend = y، فسيحتفظ بهذا التطبيق عن بعد معلق حتى تقوم بالاتصال من Eclipse.

يرى خطوة بخطوة دليل على تصحيح الأخطاء عن بعد Java للحصول على التفاصيل الكاملة.

الإجابة تغطي جافا> = 9:

بالنسبة إلى Java 9+، يحتاج خيار JVM إلى تغيير طفيف عن طريق البادئة العنوان مع عنوان IP الخاص بالجهاز الذي يستضيف 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..

بالنسبة ل Java <9، رقم المنفذ يكفي للاتصال.

هذه هي الطريقة التي يجب عليك إعداد مصححها الكسوف لتصحيح الأخطاء عن بعد:

إعدادات Eclipse:

1.Click زر التشغيل
2. حدد تكوينات التصحيح
3. حدد "تطبيق Java عن بعد"
4.New التكوين

  • الاسم: gateworeportalproject.
  • المشروع: بوابة البوابة
  • نوع الاتصال: إرفاق المقبس
  • خصائص الاتصال: I) LocalHost II) 8787

ل JBOSS:

1. تقفير /path/toJboss/jboss-eap-6.1/bin/standalone.conf في VM الخاص بك كما يلي: uncomment الخط التالي عن طريق إزالة #:

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

ل Tomcat:

في catalina.bat ملف :

الخطوة 1:

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

الخطوة 2:

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

الخطوة 3: تشغيل Tomcat من موجه الأوامر مثل أدناه:

catalina.sh jpda start

ثم تحتاج إلى تعيين نقاط التوقف في دروس Java التي تريد تصحيحها.

أود أن أؤكد ذلك ترتيب الحجج مهم.

لي 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 أمر لا.

أفضل خيار تصحيح الأخطاء هو إنشاء سجلات وتحليل السجلات. ولكن في بعض الحالات، نحتاج إلى تصحيح تطبيق الويب المنشور على الخادم.

يرى تصحيح عن بعد تطبيق Java Web حلقة الوصل. تم وصف التدفق الكامل للتصحيح عن بعد هنا. آمل أن يساعد ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top