Pergunta

É possível ver o valor de retorno de um método após a linha foi executado e antes de o ponteiro de instrução retorna para a função de chamada?

Estou a depuração do código que não pode modificar (leia-se: não quero re-compilar uma biblioteca de terceiros) , e às vezes ele salta para código não tenho fonte ou a expressão de retorno tem efeitos secundários que parar de me ser capaz de simplesmente executar a expressão no Tela guia.

Muitas vezes, o valor de retorno é usado em uma instrução composta, e por isso o Variáveis ?? Vista nunca vai me mostrar o valor (daí querendo ver o resultado antes de o controle retorna para a função de chamada).

UPDATE:. Não consigo usar o visualizador de expressão, pois há efeitos colaterais na demonstração

Foi útil?

Solução

Esta funcionalidade foi adicionada à versão Eclipse 4.7 M2 sob Eclipse bug 40912 .

Para usá-lo:

  • passo sobre a declaração return (usando "Step Over" ou "Passo Return")
  • agora a primeira linha na exibição variável irá mostrar o resultado da instrução de retorno, como "[declaração xxx] retornado:"

Consulte Eclipse Projeto Oxigênio (4.7) M2 - Nova e Notável para mais detalhes.

Outras dicas

Encontrado um bom atalho para isso. Seleccione a expressão que retorna o valor e pressione

Ctrl + Shift + D

Isto irá exibir o valor da instrução de retorno. Isto é realmente útil em casos em que você não pode ou não quer mudar apenas para fins de depuração.

Espero que isso ajude.

Nota: não testei isso com bibliotecas de terceiros, mas ele está funcionando bem para o meu código. Testado isso em Eclipse Java EE IDE para desenvolvedores Web. Versão: Juno Service Release 1

Este é realmente um bug de longa data em Eclipse, que remonta desde os primeiros dias do IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912

É por isso que eu sempre ficar com o seguinte padrão para métodos:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

As minhas regras:

  1. Apenas uma instrução de retorno, apenas no final do método (finalmente permitiu depois dela)
  2. Sempre tem um chamado resultado local que detém o valor retornado, a partir de um padrão.

Naturalmente, a maioria dos getters triviais estão isentos.

Estou curioso sobre a aprender a resposta a esta questão também.

No passado, quando se lida com biblioteca parte 3 como aquele, o que eu fiz é criar uma classe de invólucro ou classe filha que delegado para a classe pai e fazer o meu depuração na classe wrapper / criança. É preciso trabalho extra embora.

"Agora, quando você retornar de um método, no método superior, na visão variável que mostra o valor de retorno da chamada anteriormente acabado" [1]

[1] https: / /coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/

difícil. A minha experiência, fora do Eclipse, é que se você pode precisar para ver o valor de retorno, é melhor para atribuir a uma variável local na função para que a instrução de retorno é um return varname; simples e não return(some * expression || other);. No entanto, isso não é terrivelmente útil para você desde que você dizer que você não pode (ou não quer) modificar ou mesmo recompilar o código. Então, eu não tenho uma boa resposta para você -. Talvez você precisa reconsiderar sua exigência

Dependendo da instrução de retorno, você pode destacar a expressão que está sendo devolvido a partir do menu do botão direito, deve haver algo como "avaliar a expressão" (Eu não tenho eclipse na minha frente agora, mas é algo parecido). Ela vai mostrar o que vai ser devolvido.

Este é um pouco exagerado, mas como não parece ser uma maneira simples:

Você pode usar AspectJ para instrumentar o JAR com aspectos que se apossar do valor de retorno dos métodos que você está em interessado De acordo com a documentação do Eclipse, programas AspectJ pode ser Debugged como outros programas.

Existem duas opções para tecer suas aulas sem recompilar a biblioteca:

  • tecelagem Post-compilação se processar a JAR binário é aceitável;

  • tecelagem de tempo de carga, o que requer a ativação de um agente de tecelagem na VM.

Consulte a documentação do eclipse (link acima) e também o AspectJ Development Guia ambiente .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top