Qual é a diferença entre Step Into e Step Over no depurador do Eclipse?

194

Eu quero depurar todo o fluxo de um programa Java. Qual é a diferença entre F5(step into) e F6(step over) no eclipse?

JavaUser
fonte
FWIW a mesma lógica de passo a passo / passo a passo para aplicar ao Xcode / Swift
Honey

Respostas:

270

Considere o seguinte código com o ponteiro de instrução atual (a linha que será executada a seguir, indicada por ->) na f(x)linha de entrada g(), tendo sido chamada pela g(2)linha de entrada main():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

Se você entrar nesse ponto, irá para a println()linha f(), entrando na chamada de função.

Se você passar por esse ponto, você passará para a f(1)linha g(), passando por cima da chamada de função.

Outro recurso útil dos depuradores é a saída ou retorno da etapa . Nesse caso, um retorno de etapa basicamente o guiará pela função atual até você voltar um nível acima. Em outras palavras, ele avançará f(x)e f(1)voltará à função de chamada para terminar g(3)em main().

O Eclipse (pelo menos Europa, que é o único que tenho útil no momento) usa F5para step into, F6para step overe F7para step return.

paxdiablo
fonte
1
"então volte para a função de chamada para terminar em g(3); em main()" <- Você está assumindo que chegou ao seu local atual a partir de g(2)e, quando terminar, retorna à próxima linha g(3)?
Mel
1
@ Mel, sim, havia alguma ambiguidade lá (se g(2)ou a g(3)chamada está ativa no momento), então resolvi isso no primeiro parágrafo. Obrigado pela atenção.
precisa
144

Ao depurar linhas de código, aqui estão os cenários comuns:

  • ( Entrar ) Um método está prestes a ser chamado e você deseja depurar o código desse método. Portanto, o próximo passo é entrar nesse método e continuar a depuração passo a passo.
  • ( Passo a passo ) Um método está prestes a ser chamado, mas você não está interessado em depurar essa chamada específica, portanto, você deseja que o depurador execute esse método completamente como uma etapa inteira.
  • ( Retorno da etapa ) Você terminou de depurar este método passo a passo e deseja que o depurador execute o método inteiro até que ele retorne como uma etapa inteira.
  • ( Continuar ) Você deseja que o depurador continue a execução "normal" em vez de passo a passo
  • ( Ponto de interrupção da linha ) Você não se importa como chegou lá, mas se a execução atingir uma linha de código específica, você deseja que o depurador faça uma pausa temporária na execução para poder decidir o que fazer.

O Eclipse possui outros recursos avançados de depuração, mas esses são os fundamentos básicos.

Veja também

poligenelubricants
fonte
22

entrar em cavar em chamadas de método
passar por cima apenas executará a linha e passará para a próxima

Jean-Bernard Pellerin
fonte
1
Que tal "sair"?
Koray Tugay
5

Você não pode passar pelos detalhes do método usando a etapa acima. Se você quiser pular a linha atual, poderá usar o passo a passo e pressionar F6apenas uma vez para passar para a próxima linha. E se você acha que há algo errado no método, use F5para examinar os detalhes.

wanana
fonte
Então, se eu avançar e se a função contiver alguma declaração de impressão, a impressão ocorrerá ou não?
username_4567
2

Entrar na próxima expressão na linha atualmente selecionada a ser executada é invocada e a execução é suspensa na próxima linha executável no método invocado.

Passar sobre a linha atualmente selecionado é executado e suspende na próxima linha executável.

Yogesh Yadav
fonte