IntelliJ IDEA habilidades de depuração avançadas e habilidades de depuração multi-threaded

1. Ponto de interrupção condicional
2. Voltar à "etapa anterior"
3. Depuração multithread
4. Depuração remota
5. Execução temporária de expressões / modificação do valor de execução das variáveis

Ponto de interrupção condicional

O ponto de interrupção condicional é quando uma determinada condição (geralmente uma expressão) é atendida, o ponto de interrupção de depuração entrará em vigor; isso é muito útil para depurar no loop; por exemplo, queremos depurar no corpo do loop: quando uma determinada variável satisfaz um Certo Quando há condições, a depuração do ponto de interrupção é necessária para visualizar o processo de execução detalhado e as mudanças.
Como dissemos, a função de depuração no IDEA é muito poderosa e também é muito simples de usar pontos de interrupção condicionais.O conteúdo em Condição na imagem abaixo representa que quando o nome é eamon: 23, a execução do programa para no ponto de interrupção. Clique com o botão direito na origem vermelha do ponto de interrupção e a caixa aparecerá.
Insira a descrição da imagem aqui

Voltar para a etapa anterior

Insira a descrição da imagem aqui
Ou você também pode encontrar o Drop Frame Insira a descrição da imagem aqui
na figura a seguir: No IDEA, o chamado rollback é chamado de Drop Frame. Depois de selecionar Drop Frame, o programa vai voltar para o local onde o método atual é chamado. o valor alterado não será restaurado. Mas quando o método é chamado novamente, você pode observar quando uma determinada variável é alterada, pelo menos não temos que executar o programa novamente.
Nota: Curiosidade é a escada do progresso humano. Se você quiser saber por que esse recurso é chamado de Drop Frame, em vez de algo como Back To Previous, você pode ir para o livro JVM. O JVM salva a execução de threads em stack frames. Estado, soltar quadro significa descartar o quadro de pilha atualmente em execução, de modo que a posição do "ponteiro" atual vá naturalmente para a posição do quadro anterior.

Depuração multi-thread

Ao depurar na ideia, há vários threads no código. Quero rastrear o código no thread. O código é o seguinte:

        for (int i = 0; i < 5; i++) {
            final int index = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(index);
                }
            });
        }

Três pontos de interrupção foram atingidos no código acima, da seguinte maneira:
Insira a descrição da imagem aqui

Acontece que o debug é dividido em níveis: all, thread é Insira a descrição da imagem aqui
padronizado para all, e então ele só irá depurar até o breakpoint deste thread.Se você modificá-lo para thread, você pode trocar Thread para debug.

Nota: Tenha cuidado, se você quiser entrar no Thread Debug, todos os pontos de interrupção devem ser do tipo Thread, caso contrário, você ainda não pode entrar. Por exemplo, usei All
Insira a descrição da imagem aqui
Breakpoint 2 e Breakpoint 3 para o breakpoint 1. Se for do tipo Thread , você descobrirá que o ponto de interrupção 3 não pode ser inserido. . . Se você entrar, o seguinte prompt aparecerá, Insira a descrição da imagem aqui
você pode mudar o processo

Insira a descrição da imagem aqui

Depuração remota

A máquina não precisa iniciar o projeto, desde que o código-fonte esteja disponível, o código no servidor pode ser depurado diretamente na máquina.A postura de abertura é a seguinte:

4.1 Quando o projeto for iniciado, primeiro permita a depuração remota

 java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

O que funciona é

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

Nota: Tecnicamente falando, a depuração remota serve para estabelecer a comunicação scoket entre a máquina local e a remota, para que a porta não entre em conflito e a máquina deve permitir o acesso à porta remota. Além disso, este parâmetro deve ser colocado na frente de - jar ou $ {main_class}

Configure a depuração remota na ideia Insira a descrição da imagem aqui
e , em seguida, você pode depurar. A Insira a descrição da imagem aqui
premissa é que a máquina tem o código-fonte do projeto, atinge um ponto de interrupção onde você precisa e, em seguida, tente acessar uma url remota, o ponto de interrupção irá parar.

Executar expressões temporariamente / modificar o valor de execução das variáveis

Durante a depuração, você pode executar temporariamente algumas expressões. Consulte a figura abaixo: clique em qualquer um desses dois ícones. Insira a descrição da imagem aqui
Após clicar no sinal +, você pode inserir a expressão na caixa de entrada recém-exibida, como i + 5 Insira a descrição da imagem aqui
e depois voltar Você pode ver o resultado imediatamente. Insira a descrição da imagem aqui
Claro, se você quiser modificar dinamicamente o valor de uma variável durante a depuração, é fácil clicar com o botão direito na variável e selecionar Definir valor. O resto do mundo sabe tudo.
Insira a descrição da imagem aqui

Resumindo

Faça bom uso das habilidades de depuração acima e você se sentirá mais confortável ao selecionar o código.

Acho que você gosta

Origin blog.csdn.net/qq_40093255/article/details/115177712
Recomendado
Clasificación