JVM'nin uzaktan hata ayıklamasına izin vermek için ayarlanacak Java komut satırı seçenekleri nelerdir?


321

Bazılarının olduğunu biliyorum JAVA_OPTSBir Java programında uzaktan hata ayıklamak için ayarlanacak .

Bunlar nedir ve ne anlama geliyorlar?

Yanıtlar:


303

Bu makale Java 5 ve altı için bu ayar imi var .

Temel olarak ile çalıştırın :

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

İçin yukarıda Java 5 ve bunu çalıştırmak:

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

19
Bahsetmeye değer *:1044, herhangi bir bilgisayardan uzaktan hata ayıklamayı etkinleştirmek gibi adresinizi yapılandırmak isteyebilirsiniz
Herr Derb

6
HerrDerb doğru .. Java 9 "address = 1044" her zaman tüm arayüzleri dinlemediğinden. "address = *: 1044", Java 9+
sürümünün

459

Java 5.0'dan önce -Xdebugve-Xrunjdwp bağımsız değişkenler. Bu seçenekler daha sonraki sürümlerde çalışmaya devam edecektir, ancak daha yavaş olacak olan JIT yerine yorumlanmış modda çalışacaktır.

Java 5.0'dan, -agentlib:jdwptek seçeneği kullanmak daha iyidir :

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

Üzerindeki seçenekler -Xrunjdwpveya agentlib:jdwpbağımsız değişkenler:

  • transport=dt_socket : JVM'ye bağlanmak için kullanılan yol anlamına gelir (soket iyi bir seçimdir, uzak bir bilgisayarda hata ayıklamak için kullanılabilir)
  • address=8000 : TCP / IP portu açık, hata ayıklayıcıdan bağlanmak için,
  • suspend=y : 'y' ise, JVM'ye yürütmeyi başlatmak için hata ayıklayıcı eklenene kadar beklemesini söyleyin, aksi takdirde ('n' ise) hemen yürütmeye başlar.

7
Tam olarak doğru .. -Xdebug ve -Xrunjdwp ile denedim ama işe yaramadı. -Xrunjdwp veya agentlib ile denediğimde : jdwp Çalışıyor. (Java 7'de)
RoboAlex

Bu sadece tırnak içine koymak zaman benim için çalıştı, aksi takdirde bu hatayı aldım: HATA: JDWP Sunucu dışı taşıma dt_socket sunucu = y suspend = y adres = 8000 'address =' ​​seçeneği ile belirtilen bir bağlantı adresi olmalıdır
Ring

1
Is Xrunjdwpkaldırılmış (veya kaldırılır?) Neden alacağını agentlib:jdwpbitti?
ArtOfWarfare

2
Bence hatalısın. Netbeans, -Xdebug -XrunjdwpMaven projelerinde hata ayıklarken kullanır ve JIT'lenmiş gibi çalışırlar.
Aleksandr Dubinsky

78

Java 9.0'dan beri JDWP varsayılan olarak yalnızca yerel bağlantıları destekler. http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435

Uzaktan hata ayıklama için bir *:adres ile programı çalıştırmak gerekir :

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

1
Tüm yeni Java sürümleri için geçerli olan önemli bir ipucu olduğundan, bu daha fazla oy almalıdır.
Sebastian S

1
Sadece bir not: Oracle bağlantısı bunun aynı eski davranışa ulaşacağını söylüyor, ancak güvenli değil ve önerilmez.
Chanseok Oh

9

Java 1.5 veya üstü için:

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

Java 1.4 için:

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

Java 1.3 için:

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

İşte basit bir programdan çıktı:

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

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

address hata ayıklamaya izin vereceği bağlantı noktasını belirtir

Uzman

** Maven ile Spring Boot uygulamasında hata ayıklama:

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

2

İşte en kolay çözüm.

Maven kullanıyorsanız, çok sayıda ortam özel yapılandırması gerekir. Yani, programınızı maven'den başlatırsanız, mvnDebugkomut yerinemvn uygulamanızı uzaktan hata ayıklama yapılandırılmış olarak başlatmaya özen gösterir. Artık bağlantı noktası 8000'e bir hata ayıklayıcı ekleyebilirsiniz.

Sizin için tüm çevre sorunlarıyla ilgilenecektir.


1

Komut satırı

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

Gradle

gradle bootrun --debug-jvm

Uzman

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

Burada sadece dt_socket aktarımı yapılandırıldığında ve VM sunucu hata ayıklama modunda çalışırken varsayılan olarak etkinleştirilen bir Soket Takma Konektörü kullanıyoruz.

Daha fazla bilgi için şu adrese başvurabilirsiniz: https://stackify.com/java-remote-debugging/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.