É possível ver o valor de retorno de um método depois que a linha foi executada e antes que o ponteiro de instrução retorne à função de chamada?
Estou depurando um código que não consigo modificar (leia-se: não quero recompilar uma biblioteca de terceiros) , e às vezes pula para o código que não tenho fonte ou a expressão de retorno tem efeitos colaterais que me impedem de ser capaz de apenas executar a expressão na guia Exibir .
Freqüentemente, o valor de retorno é usado em uma instrução composta e, portanto, a visualização Variáveis nunca me mostrará o valor (portanto, querendo ver o resultado antes que o controle retorne à função de chamada).
ATUALIZAÇÃO: não posso usar o visualizador de expressão, pois há efeitos colaterais na instrução.
java
eclipse
debugging
return-value
RodeoClown
fonte
fonte
Respostas:
Este recurso foi adicionado ao Eclipse versão 4.7 M2 no bug 40912 do Eclipse .
Para usá-lo:
return
declaração (usando "Step Over" ou "Step Return")Consulte Eclipse Project Oxygen (4.7) M2 - Novo e notável para obter detalhes.
fonte
Encontrou um atalho realmente bom para isso. Selecione a expressão que retorna o valor e pressione
Isso exibirá o valor da instrução de retorno. Isso é realmente útil nos casos em que você não pode ou não deseja alterar apenas para fins de depuração.
Espero que isto ajude.
Nota: Não testei isso com bibliotecas de terceiros, mas está funcionando bem para o meu código. Testei no Eclipse Java EE IDE para desenvolvedores da Web. Versão: Juno Service Release 1
fonte
Ctrl + Shift + I
também foi útil para mim.return System.currentTimeMillis();
, você obteria um resultado diferente do que a função realmente retornada!Apple machine
?Na verdade, esse é um bug antigo do Eclipse, que remonta aos primeiros dias do IDE: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
fonte
É por isso que sempre mantenho o seguinte padrão para métodos:
Minhas regras:
Naturalmente, os getters mais triviais estão isentos.
fonte
Estou curioso para saber a resposta a essa pergunta também.
No passado, ao lidar com uma biblioteca de terceiros como essa, o que eu fazia era criar uma classe wrapper ou classe filha que delegava à classe pai e fazia minha depuração na classe wrapper / filha. Porém, é preciso um trabalho extra.
fonte
"Agora, quando você retorna de um método, no método superior, na visualização de variável mostra o valor de retorno da chamada concluída anteriormente" [1]
[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/eclipse-see-return-value-during-debugging/
fonte
Uma difícil. Minha experiência, fora do Eclipse, é que se você precisar ver o valor de retorno, é melhor atribuí-lo a uma variável local na função para que a instrução de retorno seja simples
return varname;
e nãoreturn(some * expression || other);
. No entanto, isso não é terrivelmente útil para você, pois você diz que não pode (ou não deseja) modificar ou mesmo recompilar o código. Portanto, não tenho uma boa resposta para você - talvez você precise reconsiderar sua exigência.fonte
Dependendo da instrução de retorno, você pode destacar a expressão que está sendo retornada e, no menu do botão direito, deve haver algo como "expressão de avaliação" (não tenho o eclipse diante de mim agora, mas é algo assim ) Ele irá mostrar o que será devolvido.
fonte
Isso é um pouco rebuscado, mas como não parece haver uma maneira simples:
Você poderia usar AspectJ para instrumentar o JAR com aspectos que controlam o valor de retorno dos métodos nos quais você está interessado. De acordo com a documentação do Eclipse, os programas AspectJ podem ser depurados como outros programas.
Existem duas opções para tecer suas classes sem recompilar a biblioteca:
O entrelaçamento pós-compilação se o processamento do JAR binário for aceitável;
Tecelagem de tempo de carregamento, 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 Environment Guide .
fonte