Anexe o depurador IntelliJ IDEA a um processo Java em execução

237

É possível conectar o depurador IntelliJ IDEA a um processo Java em execução? Se sim, como?

Marco
fonte
3
Claro. Você precisa criar uma configuração de Execução / Depuração "Remota". Mais aqui
Vic
2
Hum, esses argumentos de linha de comando são READ ONLY a partir de 14.0.2. Você pode editar apenas alguns deles, o que não ajuda a resolver o problema nesta pergunta. Alguma idéia de como consertar isso?
Nuzzolilo 28/01
A resposta está aqui: stackoverflow.com/questions/51207430/…
RoutesMaps.com

Respostas:

372

Sim! Aqui está como você o configura.

Executar configuração

Crie uma configuração de execução remota:

  1. Executar -> Editar configurações ...
  2. Clique no "+" no canto superior esquerdo
  3. Selecione a opção "Remoto" no painel mais à esquerda
  4. Escolha um nome (eu nomeei meu "depuração remota")
  5. Clique em "OK" para salvar:

insira a descrição da imagem aqui

Opções de JVM

A configuração acima fornece três campos somente leitura. Essas são opções que informam à JVM para abrir a porta 5005 para depuração remota ao executar seu aplicativo. Inclua o apropriado nas opções da JVM do aplicativo que você está depurando. Uma maneira de fazer isso seria assim:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Mas isso depende de como você executa seu aplicativo. Se você não tiver certeza de qual dos três se aplica a você, comece com o primeiro e desça a lista até encontrar o que funciona.

Você pode alterar suspend=npara suspend=yforçar seu aplicativo a aguardar até conectar-se ao IntelliJ antes de iniciar. Isso é útil se o ponto de interrupção que você deseja atingir ocorrer na inicialização do aplicativo.

Depurar

Inicie seu aplicativo como faria normalmente, no IntelliJ selecione a nova configuração e pressione 'Debug'.

insira a descrição da imagem aqui

O IntelliJ se conectará à JVM e iniciará a depuração remota.

Agora você pode depurar o aplicativo adicionando pontos de interrupção ao seu código, onde desejar. A saída do aplicativo ainda aparecerá onde quer que estivesse antes, mas seus pontos de interrupção serão atingidos no IntelliJ.

Cory Klein
fonte
2
A opção "Remoto" está ausente no meu Intellij IDEA 15.0.2 no mac os el capitan. Como posso obter essa opção?
user674669
@ user674669 Não tenho certeza. Talvez Remotenão esteja disponível na edição da comunidade? Estou usando a versão paga. Alguém com a edição da comunidade pode confirmar?
Cory Klein
@CoryKlein Você sabe como obter a saída do System.out.printlnIntelliJ durante a depuração remota?
Don Rhummy
1
@DonRhummy Se você descobrir como, ficaria feliz em adicionar essas informações a esta resposta, mas o AFAIK IntelliJ atualmente não tem suporte para canalizar stdout e stderr de um aplicativo remoto de volta ao IntelliJ.
Cory Klein
Se o servidor remoto estiver acessível apenas através do ssh, como especificamos o arquivo de chave?
Vach
44

É possível, mas você precisa adicionar alguns sinalizadores da JVM ao iniciar seu aplicativo.

Você precisa adicionar a configuração de depuração remota: Editar configuração -> Remoto.

Em seguida, você encontrará nos parâmetros da janela de diálogo exibidos que você deve adicionar à execução do programa, como:

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

Então, quando seu aplicativo for iniciado, você poderá anexar seu depurador. Se você deseja que seu aplicativo aguarde até que o depurador seja conectado, altere o sinalizador de suspensão para y ( suspend=y)

Jakub Kubrynski
fonte
Ele me confundido que você edite as entradas abaixo e estes então atualizar as cordas opção acima (em 13,1 CE, pelo menos.)
Carl G
7
Hum, esses argumentos de linha de comando são READ ONLY a partir de 14.0.2. Você pode editar alguns deles. Alguma idéia de como consertar isso?
Nuzzolilo 28/01
1
Além disso, a qual processo você está se conectando definindo essas opções?
Nuzzolilo 28/01
5
O primeiro funcionou para mim. Nota para outras pessoas - eu precisava especificar isso antes do sinalizador -jar.
jim
2
@Nuzzolilo, os argumentos da linha de comando exibidos na idéia são apenas para fins de exibição e, portanto, são somente leitura. Eles não devem ser adicionados à idéia, mas ao aplicativo java remoto que você deseja depurar.
Ganesh Krishnan
6

no AndroidStudio ou ideia

  1. Configure o aplicativo será depurado, abra Configurações de edição

adicionar "Opções da VM" Config “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005” lembrar "endereço"

insira a descrição da imagem aqui

  1. Para configurar o depurador remoto, se não houver, clique em + para adicionar

especifique "Porta" igual à "Endereço" da etapa 1 insira a descrição da imagem aqui

Conta
fonte
6

Além disso, não esqueça que você precisa adicionar o sinalizador "-Xdebug" no aplicativo JAVA_OPTS se quiser se conectar no modo de depuração.

Máx.
fonte
0

Também uso o aplicativo GUI do Tomcat (no meu caso: C: \ tomcat \ bin \ Tomcat9w.bin).

  • Vá para a guia Java :

    insira a descrição da imagem aqui

  • Defina suas propriedades Java, por exemplo:

    Máquina Virtual JAVA

    C: \ Arquivos de programas \ Java \ jre-10.0.2 \ bin \ server \ jvm.dll

    Máquina Virtual JAVA

    C: \ tomcat \ bin \ bootstrap.jar; C: \ tomcat \ bin \ tomcat-juli.jar

    Opções Java :

    -Dcatalina.home = C: \ tomcat

    -Dcatalina.base = C: \ tomcat

    -Djava.io.tmpdir = C: \ tomcat \ temp

    -Djava.util.logging.config.file = C: \ tomcat \ conf \ logging.properties

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

    Opções do Java 9 :

    --add-opens = java.base / java.lang = ALL-UNNAMED

    --add-opens = java.base / java.io = ALL-UNNAMED

    --add-opens = java.rmi / sun.rmi.transport = ALL-UNNAMED

Taras Melnyk
fonte