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?


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


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.


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)


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


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.


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

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.