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?

vencedor
fonte
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
Raghuram
fonte
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.

Ravi MCA
fonte
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.

karl
fonte
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).
RAJ
fonte
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).

DAB
fonte
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.

atamanroman
fonte
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..

Mayen
fonte
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
Shermi
fonte
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"
shachar
fonte
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

Marcelo Salazar
fonte
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.

Cheen
fonte
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.

David Stableforth
fonte
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.

Mustafa Kemal
fonte
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.

Lyju I Edwinson
fonte
-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"
Madhu K
fonte