Depuração remota do Tomcat com Eclipse


95

Não consigo depurar o aplicativo Tomcat por meio do Eclipse. Eu coloquei

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

e então eu correr bin/catalina.sh, onde eu ver a saída dizendo que é de escuta para dt_socketon port 8000. Mas sempre que tento conectar à porta 8000no Eclipse (adicionando uma entrada no menu do aplicativo Java remoto), ele reclama sobre uma conexão recusada. Alguma ideia?


você pode postar sua configuração remota usada no eclipse.
— Sean

Respostas:


133

Você pode verificar se isso funciona?

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

catalina.sh jpda start

4
Na verdade, o seu consertou. O Eclipse na verdade não diz nada quando se conecta com sucesso e reconectar pela segunda vez força o erro. Então estava funcionando, mas eu simplesmente não percebi.
— vencedor em

18
Isto é para aqueles no sistema operacional Windows:set JPDA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n catalina.bat jpda start
— Lee Chee Kiam

1
O que a opção suspend = n faz?
— Trismegistos

2
@Trismegistos. suspendespecifica se o jvm deve esperar pelo depurador ou continuar. Veja este doc .
— Raghuram de

9
Na verdade, catalina.sh jpda startdeve ser o suficiente. O catalina.sh possui alguns JPDA_*parâmetros que podem ser usados ​​para, por exemplo, alterar a porta, consulte o arquivo para obter a documentação.
— zpon

53

Passei algum tempo nisso para obter as informações certas.

Portanto, aqui estão as informações detalhadas, passo a passo.

Ambiente: Windows 7

Versão TomCat: 7.0

IDE: Eclipse

As configurações a serem adicionadas para permitir a depuração remota no tomcat são

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

Eu não recomendo a configuração acima para ambientes não Windows. Para adicionar a configuração acima, clique duas vezes no servidor tomcat que estará disponível na visualização do servidor. Encontre a captura de tela abaixo. insira a descrição da imagem aqui

Agora adicione a configuração do ambiente de execução acima ao tomcat. Para isso verifique a imagem abaixo.

insira a descrição da imagem aqui

Agora vá para a guia Arugments em Editar propriedades de configuração de inicialização, conforme mostrado na captura de tela abaixo.

insira a descrição da imagem aqui

A seção de argumentos GoTo VM adiciona essas linhas.

-Xdebug

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

insira a descrição da imagem aqui

Agora temos o botão de depuração disponível na barra de ferramentas do Eclipse.

insira a descrição da imagem aqui

Em Configurações de depuração, encontre "Aplicativo Java remoto" e clique duas vezes nele.insira a descrição da imagem aqui

No campo Nome, digite qualquer nome que desejar.

No campo do projeto, usando o botão de navegação, selecione o projeto que deseja executar a depuração remota.

O nome do host nada mais é do que o endereço do host. Aqui, estou trabalhando localmente, então é "localhost".

Por último, a coluna Porta o valor deve ser 8000. Além dos campos de texto Nome e Projeto, outras duas colunas Host e porta serão preenchidas pelo próprio eclipse, caso não faça com que você tenha os mesmos valores mencionados. Verifique a captura de tela para obter informações.insira a descrição da imagem aqui

Agora clique com o botão direito em TomcatServer no console do servidor e selecione Adicionar e Remover no menu de contexto. Nessa caixa de diálogo, você pode adicionar o projeto ao servidor.

Agora execute o servidor Tomcat.

insira a descrição da imagem aqui

Agora execute o TomCatDebugConfiguration da ferramenta de depuração.

Abra o navegador interno ou externo pela última vez e execute seu projeto. Se o controle de execução atingiu os pontos de interrupção, o eclipse solicitará a perspectiva de depuração.


47

No diretório bin do tomcat onde catalina.batou .shé encontrado (também conhecido como {CATALINA_BASE} / bin), edite (crie se não houver):

setenv.bat/.sh

Adicione a seguinte linha:

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

Isso é tudo que você precisa fazer, você não precisa editar o arquivo catalina.bat(ou .sh).

Veja os comentários em catalina.batou catalina.sh.

Você pode ter que ajustar a sintaxe para seu ambiente / situação particular. Por exemplo, se você já tem CATALINA_OPTS definido, você pode fazer algo assim (em um ambiente Windows):

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

Para depurar do Eclipse:

executar-> Configurações de depuração ...-> Aplicativo Java Remoto-> Novo

e especifique um nome, o projeto que você está depurando e o host do tomcat e a porta de depuração especificados acima.


Isso está funcionando, você precisará definir este CATALINA_OPTS em setenv.sh que está no diretório tomcat / bin. Obrigado.
— Amit Kumar,

1
No meu setenv.bat era JAVA_OPTS (tomcat 7)
— vikingsteve 01 de

Olá Philip, adicionei algumas notas que podem ajudar, se não: quais versões de OS, Tomcat e Eclipse você está usando?
— karl

em setenv.bat no bindiretório coloque uma linha como set JPDA_OPTS= -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n, o uso startup.batde começar tomcat
— Paramvir Singh Karwal

33

No catalina.batarquivo, modifique o abaixo.

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

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

  • Etapa 3: execute o Tomcat no prompt de comando como abaixo: catalina.sh jpda start

  • Etapa 4: Em seguida, no eclipse, crie uma configuração de depuração

    1. Dê qualquer nome para a configuração.
    2. Dê o project name.
    3. Dê o tipo de conexão como Standard(Socket Attach)
    4. hospedeiro como localhost
    5. porta como 8000(ou qualquer número de porta, mas deve ser o mesmo em outros lugares também).

Encontrei CATALINA_OPTS nas seguintes partes em catalina.bat,: doStop shift set ACTION = stop set CATALINA_OPTS = goto execCmd: doConfigTest shift set ACTION = configtest set CATALINA_OPTS = goto execCmd onde editá-lo? Você pode simplesmente enviar o conteúdo do seu catalina.bat?
— Gopakumar NG

Parece que você está escrevendo a mesma coisa duas vezes. Eu pulei sua etapa 1 - e funciona. Você pode confirmar que não há necessidade de alterar CATALINA_OPTS?
— Henry Aloni

para obter a diferença entre, consulte CATALINA_OPTS e JPDA_OPTS, consulte: stackoverflow.com/questions/11222365/…
— Mike R

1
Isso não funcionará no Tomcat 8. Para que funcione no Tomcat 8, você deve deixar de fora a etapa 1.
— Dave

@RAJ. Funcionou totalmente no Tomcat 6. Muito obrigado.
— T8Z

7

Muitas das respostas acima estão corretas, mas lembre-se de que, por padrão, o depurador ouvirá apenas no host local. Se você estiver depurando um servidor remoto, você precisará especificar o endereço IP para ouvir, por exemplo

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

catalina.sh jpda start

Observe que o endereço agora é 10.1.1.33 : 8000

Claro, você também pode verificar qual IP está realmente sendo usado, executando

netstat -an

no Windows e no Linux e filtre a porta com find(Windows) ou grep(Linux).


Acho que você quer dizer qual PORTA está realmente sendo usada e não qual IP .
— Abdollah

1
Não, quero dizer "endereço IP". Se você fizer depuração remota (de outra máquina), será necessário especificar um endereço IP diferente de localhost ou 127.0.0.1. É claro que você sempre precisará do número da porta.
— DAB

5

Basta executar ./catalina.sh jpda start(bifurca) ou ./catalina.sh jpda run(não bifurca, não mencionado na ajuda). Todas as opções mencionadas aqui têm valores normais.


5

Deixe-me compartilhar a maneira simples de ativar o modo de depuração remota em tomcat7 com eclipse (Windows).

Etapa 1: abra o arquivo bin / startup.bat
Etapa 2: adicione as linhas abaixo para depuração com a opção JDPA (deve ser a linha inicial do arquivo)

    set JPDA_ADDRESS=8000  
    set JPDA_TRANSPORT=dt_socket  

Passo 3: no mesmo arquivo .. vá ao final do arquivo modifique esta linha -

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

passo 4: em seguida, execute bin> startup.bat (agora seu servidor tomcat rodou em modo remoto com a porta 8000).

passo 5: depois disso, vamos conectar seu projeto de origem pelo Eclipse IDE com o cliente remoto.

etapa 6: No IDE Eclipse, vá para "configuração de depuração"

passo 7: clique em "aplicativo java remoto" e clique em "Novo"

passo 8. na guia "conectar" defina o valor do parâmetro

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

passo 9: clique em aplicar e depurar.

então, finalmente, seu cliente remoto Eclipse está conectado ao servidor tomcat em execução (modo de depuração).

Espero que esta abordagem possa ajudá-lo.

Saudações..


4

Modifique catalina.bat para adicionar

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

e

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

Opcional: adicione a linha abaixo para executar o modo de depuração por padrão ao executar startup.bat

call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%

Eclipse ou STS selecione a configuração de depuração, clique com o botão direito -> novo

connection type -> Standard socket Attach
Port -> 8000 (as given in the CATALINA_OPTS)
Host -> localhost or IP address

Esta informação é para o WINDOWS, mas por acaso eu estava no Windows e isso me ajudou. Obrigado!
— Toque em

2

Se todos os itens acima não funcionarem, você pode adicionar ao script

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

2

No tomcat 7, catalina.sh tem este código:

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 implica que você pode configurar o JPDA com:

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

Ou com:

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

E finalmente use:

catalina.sh jpda start

Saudações


Tomcat 8: As variáveis ​​JPDA_ podem ser definidas em setenv.sh sem a necessidade de 'exportá-las'. Em qualquer caso, o primeiro parâmetro da chamada de inicialização deve ser 'jpda'. Se você iniciar o tomcat como serviço, o melhor é modificar o script $ {CATALINA_HOME} /bin/startup.sh, adicionar o parâmetro 'jpda' na última linha antes de 'start': ´´exec "$ PRGDIR" / "$ EXECUTABLE "jpda start" $ @ "´´.
— Heri

1

Eu estava tendo esse problema ao executar o Tomcat dentro de um contêiner do Docker. Para corrigir isso, certifique-se de adicionar o argumento '-p 8000: 8000' em seu comando docker run para expor esta porta em sua máquina local. Obviamente, você precisará do arquivo setenv.sh em seu $ {CATALINA_HOME} / bin / dentro de seu contêiner também.


0

Modificar o startup.bat com CATALINA_OPTS E JPDA_OPTS não funcionou para mim, mas adicioná-los ao catalina.bat funcionou

  1. Modifique catalina.bat

CATALINA_OPTS = "- Xdebug -Xrunjdwp: transporte = dt_socket, endereço = 8000, servidor = y, suspender = n"

JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, endereço = 8000, servidor = y, suspender = n"

  1. Modifique o startup.bat para incluir jpda

mudar a chamada "% EXECUTABLE%" iniciar% CMD_LINE_ARGS% para

chamar "% EXECUTABLE%" jpda start% CMD_LINE_ARGS%

Em seguida, configure o aplicativo Java remoto em suas configurações de depuração no Eclipse.


0

Em primeiro lugar, se você abrir catalina.bat com o editor de texto, verá que: "Não defina as variáveis ​​neste script ..." Portanto, nunca altere nesse script, em vez disso, você pode seguir os passos abaixo:

  1. Ele aconselha você a criar um novo arquivo bat com o nome "setenv.bat".
  2. Em seguida, defina 2 variáveis ​​nesse arquivo bat, como:

    definir CATALINA_OPTS = "- Xdebug -Xrunjdwp: transporte = dt_socket, endereço = 8000, servidor = y, suspender = n"

    definir JPDA_OPTS = "- agentlib: jdwp = transport = dt_socket, endereço = 8000, servidor = y, suspender = n"

  3. Por último, execute-o no cmd que: "catalina.bat jpda start"

  4. No IDE, crie a configuração de depuração remota e defina o host para o ip e porta do servidor relacionado como 8000.


0

Para a versão apache-tomcat-8.5.28 basta fazer isso,

catalina.bat jpda start

Como as configurações padrão já configuradas para nós em catalina.bat como

se não "% JPDA_OPTS%" == "" goto gotJpdaOpts set JPDA_OPTS = -agentlib: jdwp = transport =% JPDA_TRANSPORT%, address =% JPDA_ADDRESS%, server = y, suspend =% JPDA_SUSPEND%

Portanto, não há necessidade de qualquer outra configuração. E quando você executa o comando catalina.bat jpda start, pode ver que a porta de depuração 8000 está aberta.



-2

Para apache-tomcat-8.5.28

modifique JDPA_OPTScomo a seguir e execute comocatalina.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"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.