Zdalne debugowanie Tomcat za pomocą Eclipse

95

Nie mogę debugować aplikacji tomcat za pośrednictwem Eclipse. Ustawiłem

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

a następnie uruchomić bin/catalina.sh, gdzie widzę wyjście mówiąc, że to nasłuchiwanie dt_socketna port 8000. Ale ilekroć próbuję połączyć się z portem 8000w Eclipse (dodając wpis w menu zdalnej aplikacji java), narzeka na odmowę połączenia. Jakieś pomysły?

zwycięzca
źródło
czy możesz opublikować swoją zdalną konfigurację używaną w eclipse.
Sean

Odpowiedzi:

134

Czy możesz sprawdzić, czy to działa?

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

catalina.sh jpda start
Raghuram
źródło
4
Właściwie to twój naprawił to. Eclipse tak naprawdę nic nie mówi, gdy pomyślnie się połączy, a ponowne połączenie wymusza błąd. Więc to działało, ale po prostu nie zauważyłem.
zwycięzca
18
To jest dla tych w systemie operacyjnym Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
Lee Chee Kiam
1
Co robi opcja suspend = n?
Trismegistos
2
@Trismegistos. suspendokreśla, czy jvm ma czekać na debuger, czy kontynuować. Zobacz ten dokument .
Raghuram
10
Właściwie catalina.sh jpda startpowinno wystarczyć. Catalina.sh ma kilka JPDA_*parametrów, które można wykorzystać na przykład do zmiany portu, zapoznaj się z dokumentacją w pliku.
zpon
53

Spędziłem nad tym trochę czasu, aby uzyskać właściwe informacje.

Oto szczegółowe informacje krok po kroku.

Środowisko: Windows 7

Wersja TomCat: 7.0.0

IDE: Eclipse

Konfiguracje, które mają zostać dodane w celu włączenia zdalnego debugowania za pomocą programu Tomcat, to

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

Nie polecam powyższej konfiguracji dla środowiska innego niż Windows. Aby dodać powyższą konfigurację, kliknij dwukrotnie serwer Tomcat, który będzie dostępny w widoku serwera. Znajdź poniższy zrzut ekranu. wprowadź opis obrazu tutaj

Teraz dodaj powyższą konfigurację środowiska wykonawczego do tomcat. Do tego sprawdzenia poniżej zrzut ekranu.

wprowadź opis obrazu tutaj

Teraz dotarłem do zakładki Arugments w Edytuj właściwości konfiguracji uruchamiania, jak pokazano na poniższym zrzucie ekranu.

wprowadź opis obrazu tutaj

Sekcja argumentów GoTo VM dodaje te wiersze.

-Xdebug

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

wprowadź opis obrazu tutaj

Teraz muszę debugować przycisk dostępny na pasku narzędzi zaćmienia.

wprowadź opis obrazu tutaj

W konfiguracjach debugowania znajdź „Remote Java Application” i kliknij na nią dwukrotnie.wprowadź opis obrazu tutaj

W polu Nazwa wprowadź dowolną nazwę, którą chcesz.

Z pola projektu za pomocą przycisku przeglądania wybierz projekt, w którym chcesz przeprowadzić zdalne debugowanie.

Nazwa hosta to nic innego jak adres hosta. Tutaj pracuję lokalnie, więc jest to „localhost”.

W ostatniej kolumnie Port wartość powinna wynosić 8000. Oprócz pól tekstowych Nazwa i Projekt pozostałe dwie kolumny Host i port zostaną wypełnione przez samo zaćmienie, jeśli nie sprawią, że będziesz mieć takie same wartości, jak wspomniano. Sprawdź zrzut ekranu, aby uzyskać informacje.wprowadź opis obrazu tutaj

Teraz kliknij prawym przyciskiem myszy TomcatServer w konsoli serwera i wybierz Dodaj i usuń z menu kontekstowego. W tym oknie dialogowym możesz dodać projekt do serwera.

Teraz uruchom serwer Tomcat.

wprowadź opis obrazu tutaj

Teraz uruchom TomCatDebugConfiguration z narzędzia debugowania.

Ostatnio otwórz wewnętrzną lub zewnętrzną przeglądarkę i uruchom swój projekt. Jeśli sterowanie wykonaniem osiągnęło punkty przerwania, zaćmienie zapyta o perspektywę debugowania.

Ravi MCA
źródło
47

W katalogu tomcat bin, w którym znajduje się catalina.batlub .sh(aka {CATALINA_BASE} / bin), edytuj (utwórz, jeśli nie ma):

setenv.bat/.sh

Dodaj następujący wiersz:

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

To wszystko, co musisz zrobić, nie musisz edytować catalina.bat(ani .sh) pliku.

Zobacz komentarze w catalina.batlub catalina.sh.

Może być konieczne dostosowanie składni do konkretnego środowiska / sytuacji. Na przykład, jeśli masz już zdefiniowane CATALINA_OPTS, możesz zrobić coś takiego (w środowisku Windows):

set CATALINA_OPTS=%CATALINA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8088,server=y,suspend=n

Aby debugować z Eclipse:

uruchom-> Konfiguracje debugowania ...-> Zdalna aplikacja Java-> Nowa

i określ nazwę, projekt, który debugujesz, oraz host i port debugowania tomcat określony powyżej.

karl
źródło
To działa, musisz ustawić to CATALINA_OPTS w setenv.sh, który znajduje się w katalogu tomcat / bin. Dzięki.
Amit Kumar
1
W moim setenv.bat był to JAVA_OPTS (tomcat 7)
vikingsteve
Witaj Filipie, dodałem kilka uwag, które mogą pomóc, jeśli nie: której wersji systemu operacyjnego, tomcat i eclipse używasz?
karl
w setenv.bat w binkatalogu umieścić linię jak set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, użytkowania startup.bat, aby rozpocząć Tomcat
Paramvir Singh Karwal
33

W catalina.batpliku proszę zmodyfikować poniższe.

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

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

  • Krok 3: Uruchom Tomcat z wiersza poleceń, jak poniżej: catalina.sh jpda start

  • Krok 4: Następnie w zaćmieniu utwórz konfigurację debugowania

    1. Podaj dowolną nazwę konfiguracji.
    2. Podaj project name.
    3. Podaj typ połączenia jako Standard(Socket Attach)
    4. host jako localhost
    5. port as 8000(lub dowolny numer portu, ale w innych miejscach powinien być taki sam).
RAJ
źródło
Znalazłem CATALINA_OPTS w następujących częściach pod adresem catalina.bat,: zestaw przesunięcia doStop ACTION = zestaw zatrzymania CATALINA_OPTS = goto execCmd: zestaw przesunięć doConfigTest ACTION = zestaw configtest CATALINA_OPTS = goto execCmd gdzie go edytować? Czy możesz po prostu przesłać zawartość swojego catalina.bat?
Gopakumar NG
Wygląda na to, że piszesz dwa razy to samo. Pominąłem twój krok 1 - i działa. Czy możesz potwierdzić, że nie ma potrzeby zmiany CATALINA_OPTS?
Henry Aloni
dla różnicy między patrz CATALINA_OPTS i JPDA_OPTS patrz: stackoverflow.com/questions/11222365/…
Mike R
1
To nie zadziała w Tomcat 8. Aby działało w Tomcat 8, musisz pominąć krok 1.
Dave.
@RAJ. To działało całkowicie w Tomcat 6. Dziękuję bardzo.
T8Z
7

Wiele z powyższych odpowiedzi jest poprawnych, ale pamiętaj, że domyślnie debugger nasłuchuje na hoście lokalnym , co oznacza, że ​​możesz debugować tylko wtedy, gdy uruchomisz klienta debugującego (na przykład IDE) na tej samej maszynie.

Jeśli debugujesz zdalny serwer , będziesz musiał na przykład określić poprawny adres IP na tym serwerze, aby nasłuchiwać

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

catalina.sh jpda start

Zauważ, że adres to teraz 10.1.1.33 : 8000

Oczywiście możesz również sprawdzić, który adres IP jest faktycznie używany, uruchamiając

netstat -an

To polecenie działa zarówno w systemie Windows, jak i Linux - wystarczy odfiltrować port za pomocą find(Windows) lub grep(Linux).

ZIMNICA
źródło
Myślę, że masz na myśli, który PORT jest aktualnie używany, a nie który adres IP .
Abdollah
2
Nie, mam na myśli „adres IP”. Jeśli wykonujesz zdalne debugowanie (z innego komputera), musisz mieć możliwość określenia adresu IP, który różni się od localhost lub 127.0.0.1. Oczywiście zawsze będziesz potrzebować numeru portu.
DAB
5

Po prostu biegnij ./catalina.sh jpda start(rozwidla) lub ./catalina.sh jpda run(nie rozwidla się, nie ma wzmianki w pomocy). Wszystkie wymienione tutaj opcje domyślnie mają rozsądne wartości.

atamanroman
źródło
5

Pozwólcie, że przedstawię prosty sposób włączenia trybu zdalnego debugowania w tomcat7 z eclipse (Windows).

Krok 1: otwórz plik bin / startup.bat
Krok 2: dodaj poniższe wiersze do debugowania z opcją JDPA (powinien zaczynać się wiersz pliku)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Krok 3: w tym samym pliku ... przejdź na koniec pliku zmodyfikuj tę linię -

    call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%  
    instead of line  
    call "%EXECUTABLE%" start %CMD_LINE_ARGS%  

krok 4: następnie po prostu uruchom bin> startup.bat (więc teraz twój serwer Tomcat działał w trybie zdalnym z portem 8000).

krok 5: następnie połączmy twój projekt źródłowy przez eclipse IDE ze zdalnym klientem.

krok 6: W Eclipse IDE przejdź do „konfiguracji debugowania”

krok 7: kliknij „zdalna aplikacja java”, a następnie kliknij „Nowy”

krok 8. w zakładce „connect” ustaw wartość parametru

   project= your source project  
   connection Type: standard (socket attached)   
   host: localhost  
   port:8000  

krok 9: kliknij zastosuj i debuguj.

więc w końcu twój zdalny klient eclipse jest połączony z działającym serwerem Tomcat (tryb debugowania).

Mam nadzieję, że to podejście może ci pomóc.

Pozdrowienia..

Mayen
źródło
4

Zmodyfikuj plik catalina.bat, aby dodać

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

i

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

Opcjonalnie: Dodaj poniższy wiersz, aby domyślnie uruchamiać tryb debugowania po uruchomieniu startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse lub STS wybierz konfigurację debugowania kliknij prawym przyciskiem myszy -> nowy

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address
shermi
źródło
Ta informacja dotyczy systemu WINDOWS, ale tak się złożyło, że znalazłem się w systemie Windows, więc pomogła mi. Dzięki!
Zadzwoń
2

Jeśli nadal wszystkie powyższe nie działają, zawsze możesz dodać do skryptu

    set "JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
shachar
źródło
2

W tomcat 7, catalina.sh ma ten kod:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

Ii sugeruje, że możesz skonfigurować JPDA za pomocą:

export JPDA_TRANSPORT=dt_socket
export JPDA_ADDRESS=8000
export JPDA_SUSPEND=n

Lub z:

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

I na koniec użyj:

catalina.sh jpda start

pozdrowienia

Marcelo Salazar
źródło
Tomcat 8: Zmienne JPDA_ można ustawić w setenv.sh bez konieczności ich „eksportowania”. W każdym razie pierwszym parametrem wywołania startowego musi być „jpda”. Jeśli uruchamiasz tomcat jako usługę, najlepiej zmodyfikować skrypt $ {CATALINA_HOME} /bin/startup.sh, dodać parametr 'jpda' w ostatnim wierszu przed 'start': ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
Heri
1

Miałem ten problem podczas uruchamiania Tomcata w kontenerze Docker. Aby to naprawić, upewnij się, że dodajesz argument „-p 8000: 8000” w poleceniu docker run, aby udostępnić ten port na komputerze lokalnym. Będziesz oczywiście potrzebować pliku setenv.sh w swoim $ {CATALINA_HOME} / bin / w swoim kontenerze.

Cheen
źródło
0

Modyfikacja startup.bat za pomocą CATALINA_OPTS I JPDA_OPTS nie zadziałała, ale dodanie ich do catalina.bat zadziałało

  1. Zmodyfikuj plik catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transport = dt_socket, adres = 8000, serwer = y, zawieszenie = n"

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, adres = 8000, serwer = y, suspend = n"

  1. Zmodyfikuj plik startup.bat, aby zawierał jpda

zmień wywołanie "% EXECUTABLE%" start% CMD_LINE_ARGS% na

zadzwoń do "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Następnie skonfiguruj zdalną aplikację java w konfiguracjach debugowania w Eclipse.

David Stableforth
źródło
0

Po pierwsze, jeśli otworzysz catalina.bat za pomocą edytora tekstu, zobaczysz, że: „Nie ustawiaj zmiennych w tym skrypcie .....” Więc nigdy nie zmieniaj tego w tym skrypcie, zamiast tego możesz wykonać poniższe czynności:

  1. Zaleca utworzenie nowego pliku bat o nazwie „setenv.bat”.
  2. Następnie ustaw 2 zmienne w tym pliku bat, takie jak:

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

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

  3. Na koniec uruchom to w cmd, które: „catalina.bat jpda start”

  4. W IDE utwórz konfigurację zdalnego debugowania i ustaw hosta na powiązany adres IP serwera i port na 8000.

Mustafa Kemal
źródło
0

W przypadku wersji apache-tomcat-8.5.28 po prostu zrób to,

catalina.bat jpda start

Jako domyślne ustawienia już skonfigurowane dla nas w catalina.bat jako

jeśli nie "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Więc nie ma potrzeby żadnej innej konfiguracji. A kiedy wykonasz polecenie catalina.bat jpda start, zobaczysz, że port debugowania 8000 jest otwarty.

Lyju I Edwinson
źródło
-2

W przypadku apache-tomcat-8.5.28

zmodyfikuj JDPA_OPTSjak poniżej, a następnie uruchom jakcatalina.bat jpda start

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=8000,server=y,suspend=$JPDA_SUSPEND"
Madhu K.
źródło