Eclipse ile Spring Boot uygulamasında nasıl hata ayıklanır?


101

Web uygulamam Spring Bootgayet iyi çalışıyor ve Eclipse aracılığıyla hata ayıklamak istiyorum.

Öyleyse, Uzak Java Uygulaması hata ayıklayıcımı başlatırken hangi bağlantı noktasını dinlemeliyim? Web uygulamamda hata ayıklamayı etkinleştirmek için ayarlamam gereken bir ayar var mı?


STS 3.9.4.RELEASE on Linux Mint 18'de Sarah Spring Boot uygulamalarında hata ayıklamak için hata ayıklama perspektifine girmem gerekiyor.
TimeTrap

Yanıtlar:


167

Neden main()yönteme sağ tıklayıp seçim yapmıyorsun "Debug As... Java Application"?


Bunu düşünmemiştim. Bir dinlenme uygulamasını test ediyorum. Başlatmak ve sonra tarayıcımla farklı yapılandırmalarla ona ulaşmak.
JeffLL

9
Bir sunucu üzerinde uzaktan çalışan uygulamada hata ayıklamanın gerekebileceği ve bunun geçerli olmadığı zamanlar vardır.
Cuga

Benim için işe yaramadı. "Düzenleyici ana tür içermiyor"
Raj

Sanırım "main () yöntemine sağ tıklamadın" o zaman?
Dave Syer

4
Durumum farklıydı, Running Main doğrudan birkaç bahar yapılandırma dosyası, yani bootstrap.xml almıyordu, sonra onu maven spring-boot: run olarak çalıştırmaya geçmek zorunda kaldım. Ancak bununla ilgili sorun, bu maven hedefini tutulmadan çalıştırıyor olsanız bile, hata ayıklamayacaktır.
sanjay patel

92

Spring Boot Reference'ta , uygulamanızı uzaktan hata ayıklama desteği etkin olarak başlatmanızı anlatan 19.2 bölümü vardır .

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

Uygulamanızı başlattıktan sonra, bu Uzak Java Uygulaması yapılandırmasını Çalıştır / Hata Ayıklama yapılandırmalarına ekleyin, uygulamanızı başlatırken tanımladığınız bağlantı noktasını / adresi seçin ve ardından hata ayıklamakta özgürsünüz.


Bu benim için çalıştı. Teşekkürler! Eclipse, yaylı önyükleme projemde hata ayıklayamadı (Main sınıfının bulunamadığından şikayet etmeye devam etti).
user6123723

4
Java 8 ile (diğer sürümleri bilmiyorum) java -agentlib:jdwp=help"Eski -Xrunjdwp arabirimi hala kullanılabilir, ancak gelecekteki bir sürümde kaldırılacaktır" durumlarını çalıştırdığına dikkat edin. Bunun yerine kullanın-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Paul

23

Daha kolay çözüm:

Yazmak yerine mvn spring-boot:runyazınmvnDebug spring-boot:run

İlgili bağlantı noktasında bir "Uzak Java Uygulaması" için yeni bir Hata Ayıklama Yapılandırması yaparak Eclipse'de hata ayıklayıcıyı eklemeniz gerekir.


3
O halde varsayılandan farklı bir bağlantı noktası numarasını nasıl belirtirsiniz?
Stephane

19

Bunu çalıştırmak için uzaktan hata ayıklama kurmam gerekmedi, Maven'i kullandım.

  1. Eclipse'de Maven eklentisinin kurulu olduğundan emin olun.
  2. Click Çalıştır> Çalıştır Yapılandırmaları> Maven Oluştur> Yeni fırlatma yapılandırmasını :
    • Temel dizin: projenizin kök dizinine göz atın
    • Hedefleri: spring-boot::run.
  3. Click Uygula ardından Çalıştır .

NB. IDE'niz satır satır hata ayıklama yaparken projenizin kaynak kodunu bulmakta sorun yaşıyorsa, bu SO yanıtına bir göz atın yaşıyorsa, kaynak kodunuzu hata ayıklama uygulamasına manuel olarak nasıl ekleyeceğinizi öğrenmek için .

Umarım bu birine yardımcı olur!


Sunucuyu spring-boot: run ile çalıştırırsanız, konsol penceresindeki Kırmızı simgeye basarak onu durduramazsınız.
Shailesh Pratapwar

Bu şekilde durdurabilirim (netstat'ın kurulmasına ihtiyaç duyabilir, bir ikili program açıp açmadığımı veya Cygwin ile gelip gelmediğimi ya da şimdi pencerelerin bir kısmını unuturum): netstat -ano | grep "9999" - Windows taskkill / F / PID 36308'de 36308 görev kimliğini
döndürür

19

Uzaktan hazırlama veya üretim Spring Boot uygulamasında nasıl hata ayıklanır

Sunucu tarafı

Spring Boot uygulamanızı bir hizmet olarak kurma konusunda Spring Boot'un kılavuzunu başarıyla takip ettiğinizi varsayalım . Uygulama yapınız /srv/my-app/my-app.war, bir yapılandırma dosyasıyla birlikte içinde bulunur /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

Spring Boot uygulamanızı ile yeniden sudo service my-app restartbaşlattığınızda, günlük dosyasında yer alan /var/log/my-app.logbir satır olmalıdır Listening for transport dt_socket at address: 8002.

İstemci tarafı (geliştirici makinesi)

Sunucusuna SSH port yönlendirme tüneli açma: ssh -L 8002:localhost:8002 myusername@staging.example.com. Bu SSH oturumunu çalışır durumda tutun.

Eclipse'de, araç çubuğundan Çalıştır -> Hata Ayıklama Yapılandırmaları'nı seçin -> Uzak Java Uygulaması'nı seçin -> Yeni düğmesini tıklayın -> Bağlantı Türü Standardı (Soket Ekleme) , Ana Bilgisayar localhost ve Port 8002 (veya sahip olduğunuz önceki adımlarda yapılandırılmıştır). Uygula'yı ve ardından Hata Ayıkla'yı tıklayın. .

Eclipse hata ayıklayıcısının artık uzak sunucuya bağlanması gerekir. Hata Ayıklama perspektifine geçiş , bağlı JVM'yi ve iş parçacıklarını göstermelidir. Kesme noktaları, uzaktan tetiklendikleri anda tetiklenmelidir.


Bağlantı noktası yönlendirme ve tünelleme, eksik olduğum kısımdı. Ta. Amazon'da diyelim ki internet tabanlı bir sunucuda hata ayıklıyorsanız çok önemlidir.
PaulNUK

14

Aşağıdaki komutu pom.xmlyerleştirildiği yerde çalıştırın :

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

Ve uzak java uygulamanızı bağlantı noktasında hata ayıklama seçeneğiyle başlatın5005


2
Bu, bir hata ayıklayıcının eklenmesini beklemez Spring Boot 2.0.3.RELEASE.
Stephane

10

Bence en iyi çözüm, pom.xml dosyasına bir eklenti eklemektir ve her zaman başka bir şey yapmanıza gerek yoktur:

<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>

Ancak komut mvn clean installhata ayıklayıcıyı tetikler ve yapı askıda kalır. Keşke mvnDebug clean installkomut bunu yapsaydı harika olurdu.
Stephane

1
@Stephane, bu yapılandırma muhtemelen etkinleştirilmesi kolay belirli bir profilde olmalıdır
davidxxx

4
  • projenize sağ tıklayın ve "Debug As => Java uygulaması veya Spring boot App" seçeneğini seçin -capture1 - görüntü açıklamasını buraya girin
  • Uygulamanızın bir yerde duraklamasını istiyorsanız, solda çift tıklayın, bu yakalama gibi olacaktır 2. görüntü açıklamasını buraya girin
  • ardından uygulamanızı başlattığınızda bir sonraki gitmek için bu okları kullanın. (3 numaralı çekim) görüntü açıklamasını buraya girin

Bu, başlık sorusuna iyi bir cevaptır. Bununla birlikte, açıklamanın daha belirgin ve farklı bir sorusu vardır ve bu da farklı bir cevap gerektirir.
Thor Hovden

Bu yüzden MyEclispe kullanıyordum ve Hata Ayıkla -> Spring Boot Uygulaması seçeneği mevcuttu ve iyi çalıştı. Eclipse Oxygen kullanmıyorum ve Spring Boot Uygulaması menü öğesi artık mevcut değil. Bunu almak için tutulma için bir eklenti yüklemem gerekiyor mu?
Kachopsticks

3

Right click on the spring boot project -> debug as -> spring boot App. Bir hata ayıklayıcı noktası koyun ve uygulamayı postacı gibi bir istemciden çağırın


2

Lütfen http://java.dzone.com/articles/how-debug-remote-java-applicat adresine bakınUzaktan hata ayıklamayı etkinleştirmek için . Uygulamanızı çalıştırmak için tomcat kullanıyorsanız, tomcat'i uzaktan hata ayıklama parametreleriyle başlatın veya aşağıdaki komutu kullanarak tomcat'i JPDA desteğiyle başlatabilirsiniz.

pencereler

<tomcat bin dir>/startup.bat jpda

* nix

<tomcat bin dir>/startup.sh jpda

bu, 8000 numaralı bağlantı noktasında uzaktan hata ayıklamayı etkinleştirir


2

Eclipse veya başka bir IDE ile, ana yay önyükleme uygulamanıza sağ tıklayın ve "java uygulaması olarak hata ayıkla" yı tıklayın.


2

Bu soru zaten yanıtlandı, ancak aynı sorunu Springboot + gradle + jHipster'da hata ayıklamak için de aldım,

Çoğunlukla Spring önyükleme uygulaması sağ tıklama ve hata ayıklama yoluyla hata ayıklayabilir, ancak gradle'ı kullandığınızda, bazı ek ortam parametreleri ayarlarına sahip olduğunuzda, doğrudan hata ayıklamak mümkün değildir.

Eclipse, bu sorunu çözmek için Uzak Java Uygulaması olarak bir ek özellik sağladı

Bu özellikleri kullanarak uygulamanızda hata ayıklayabilirsiniz.

Aşağıdaki adımı izleyin:

gradle uygulamanızı ./gradlew bootRun --debug-jvmkomutla çalıştırın

Şimdi eclipse'e gidin -> projeye sağ tıklayın ve Hata Ayıklama Yapılandırması -> Uzak Java Uygulaması.

ana bilgisayarı ve bağlantı noktasını localhost ve bağlantı noktasını 5005 olarak ekleyin (gradle hata ayıklama için varsayılan, değiştirebilirsiniz)

Daha fazla ayrıntı ve adım için bakın .


0

Spring Boot Applications ana sınıf dosyasına sağ tıklayın -> Hata Ayıklama seçeneklerini seçin -> Java Uygulamasını seçin

görüntü açıklamasını buraya girin Artık uygulamada hata ayıklamak için kesme noktalarını kullanabilirsiniz.

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.