Posso descobrir o valor de retorno antes de retornar durante a depuração no Intellij?


127

Com:

Object method(){
    ...
    return /* some complex expression */
}

Existe uma maneira de ver qual valor será retornado durante a depuração? Como de alguma forma definir um ponto de interrupção que seria atingido logo após o retorno, mas antes da execução ir para o código de chamada? Gostaria de saber qual é o valor de retorno e também de ver quais são os valores de todas as variáveis ​​locais.

A maneira que eu faço agora é fazendo uma variável temporária: Object ret = /* something complex */; return ret;. Mas isso é um aborrecimento e também adiciona uma linha extra de código desnecessária.

Nota: Essa é a mesma pergunta que Posso descobrir o valor de retorno antes de retornar durante a depuração no Visual Studio , mas para intellij.

Respostas:


31

Parece haver algumas maneiras de fazer isso. O primeiro envolve a configuração do ponto de interrupção na assinatura do método; no seu caso, você configuraria um ponto de interrupção no método Object () {. Isso permitirá que você observe a entrada e a saída do método. Acredito que você precise usá-lo em conjunto com " Observar os valores de retorno do método", como mencionado acima, mas não pude testar completamente isso, pois leva muito tempo para calcular. Cuidado, isso diminui drasticamente o desempenho do depurador e levará mais tempo para depurar.

Além disso, você pode fazer o seguinte manualmente.

  1. Configure o ponto de interrupção na linha de retorno.
  2. Quando a linha de retorno for pressionada, clique na linha de retorno, coloque especificamente o cursor na operação que deseja ver e, em seguida, vá em Executar-> Avaliar Expressão (ou Alt-F8) e ela deve executar a expressão nesse ponto e devolver o que está retornando.

Nota : Se você criar um ponto de interrupção, há muitas coisas que você pode pedir à IDEA para fazer com elas, como se você interromper um ponto de interrupção, você pode pedir para executar uma expressão e registrá-la. Você pode olhar ao redor com o que pode fazer se clicar com o botão direito do mouse em um ponto de interrupção e clicar em Propriedades.

ATUALIZAÇÃO : Tente isso em conjunto com a primeira maneira de fazer isso. Não use "Observar método retornar valores", pois parece diminuir ou congelar a sessão de depuração. Em vez disso, faça o seguinte

  1. Clique com o botão direito do mouse na expressão de retorno que deseja ver e clique em "Adicionar aos Relógios"
  2. Em seguida, adicione um ponto de interrupção do método como indicado acima.
  3. Depure seu programa e seu método será interrompido na assinatura do método.
  4. Pressione a tecla F9 para continuar e ela deve quebrar novamente APÓS a expressão de retorno ter sido calculada e sua expressão de retorno estar na coluna de observação.

Lembre-se de que os pontos de interrupção do método são mais lentos, por isso pode levar mais tempo; uma maneira complicada de melhorar isso se você perceber um grande impacto no desempenho é definindo o ponto de interrupção da instrução de retorno (sem ter um ponto de interrupção do método) e adicionando o ponto de interrupção do método DEPOIS o ponto de interrupção da instrução de retorno é atingido e continua.

Espero que isto ajude,


1
Na verdade, depois de adicionar um ponto de interrupção e um relógio a (novo X ()), você pode simplesmente pressionar Alt + F8 nesse relógio para 'analisar' o objeto retornado. Isso é realmente útil.
Kedar Mhaswade

Se estou entendendo isso corretamente, a solução proposta aqui funciona apenas se a expressão não tiver efeitos colaterais. Definitivamente, não recomendo colocar expressões complicadas na janela de variáveis ​​/ watch em geral.
Mashmagar

Desde pelo menos 2016.3, existe uma maneira muito melhor. Veja a resposta da Birchlabs para obter detalhes. Agora deve ser a resposta aceita.
precisa saber é o seguinte

150

No IntelliJ IDEA 2016.3: está oculto dentro do botão de engrenagem do painel de depuração. Verifique se Show Method Return Valuesestá marcado .

IntelliJ IDEA 2016.3 "Mostrar valores de retorno do método"

Use o depurador para quebrar em algum lugar da função cujo valor de retorno você gostaria de ver.

entrar em função

Saia da função (ou até você escapar):

sair

Observe que o valor de retorno aparece em suas variáveis:

observe o valor de retorno


3
@ Stan Atualizei minha resposta para fornecer um exemplo trabalhado.
Birchlabs

40

Há o botão de valores de retorno do método Watch disponível no painel do depurador .

Observar os valores de retorno do método : Clique neste botão para assistir os valores de retorno do último método executado.

valores de retorno do método watch

Configuração da IDEA 12:

IDEA 12


2
Parece que nada aparece nas guias "Variáveis" ou "Relógios". Estou usando o Groovy, se isso importa. Além disso, parece que ele mostrará o valor de retorno do último método executado a partir do contexto do código de chamada, e não do contexto do próprio método. A diferença importante disso é que, se você pode vê-lo a partir do contexto do próprio método, também pode observar os valores das variáveis ​​locais do método. Isso pode permitir que você veja o que deu errado se o método estiver retornando um valor incorreto.
Kyle

3
Ele mostra o valor de retorno no painel "Variáveis" (usando o nome completo do método). Essa deveria ter sido a resposta aceita. @CrazyCoder +1 de mim :-)
Omri Spector

4
@CrazyCoder: esse recurso ainda existe para o IDEA 13? Eu não encontro.
Kevinarpe

1
Estou no Intellij 15 e não vejo isso também. Você pode postar uma captura de tela?
Sanjiv Jivan 22/10/2015

3
em janeiro de 2017 (Idea 2016.3.2): você deve clicar no ícone Configurações (a engrenagem, logo acima do item de menu amarelo na 2ª imagem), um menu exibido que inclui "Mostrar valores de retorno do método". Não há necessidade de reiniciar qualquer coisa: depois do próximo retorno de um método, a sua ObjectClassName.methodName () aparece na visualização Variáveis logo abaixo deste .
precisa saber é o seguinte

1

Isso foi perguntado há um tempo atrás, mas eu uso um método diferente quando quero lidar com essa situação.

Ao depurar, você pode marcar a expressão (no seu caso, a expressão logo após o "retorno") e pressionar CTRL + ALT + F8 (Expressão de Avaliação Rápida). O IntelliJ abrirá uma pequena janela mostrando o valor que será retornado.


2
Se você usar um chip gráfico da Intel, esse atalho de teclado desligará os monitores secundários .
Coli

1
Usuários do Linux: Ctrl + Alt + F8 - Enviarão o usuário para o 2º Terminal da GUI. No Ubuntu, pressionei Ctrl + Alt + F2 para retornar.
Dmitriy Pavlukhin
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.