Como evitar variáveis somente do depurador?
-
21-09-2019 - |
Pergunta
Normalmente coloco em variáveis valores que são usados apenas uma vez após a atribuição.Faço isso para tornar a depuração mais conveniente posteriormente, pois posso passar o mouse sobre o valor na linha onde ele será usado posteriormente.
Por exemplo, este código não permite que você passe o mouse sobre o valor de GetFoo():
return GetFoo();
Mas este código faz:
var foo = GetFoo();
return foo; // your hover-foo is great
Isso cheira muito YAGNI-esque, Enquanto o funcionalidade do fooA atribuição de nunca será usada até que alguém precise depurar seu valor, o que pode nunca acontece.Se não fosse pelo meramente previsto sessão de depuração, o primeiro trecho de código acima mantém o código mais simples.
Como você escreveria o código para obter o melhor compromisso entre simplicidade e facilidade de uso do depurador?
Solução
Não conheço outros depuradores, mas o depurador integrado do Visual Studio relatará o que foi retornado de uma função na janela "Autos";depois que você passa pela instrução de retorno, o valor de retorno aparece como "[nome da função] retornado" com um valor de qualquer valor retornado.
gdb também suporta a mesma funcionalidade;o comando "finish" executa o restante da função atual e imprime o valor de retorno.
Sendo este um recurso muito útil, eu ficaria surpreso se a maioria dos outros depuradores não apoiar esta capacidade.
Quanto ao "problema" mais geral das "variáveis somente do depurador", elas são realmente somente do depurador?Tenho tendência a pensar que o uso de variáveis temporárias bem nomeadas também pode melhorar significativamente a legibilidade do código.
Outras dicas
Outra possibilidade é aprender programação assembly suficiente para poder ler o código gerado pelo seu compilador.Com essa habilidade, você pode descobrir onde o valor está armazenado (em um registrador, na memória) e ver o valor sem precisar armazená-lo em uma variável.
Essa habilidade é muito útil se você precisar depurar um executável otimizado.O otimizador pode gerar código significativamente diferente de como você o escreveu, de modo que a depuração simbólica não seja útil.
Outro motivo pelo qual você não precisa de variáveis intermediárias no depurador do Visual Studio é que você pode avaliar a função na janela de observação e na janela imediata.Para a janela de observação, basta destacar a instrução que deseja avaliar e arrastá-la para a janela.
Eu diria que não vale a pena se preocupar.Dado que não há sobrecarga de tempo de execução no caso típico, enlouqueça.Acho que dividir declarações complexas em múltiplas declarações simples geralmente aumenta a legibilidade.
Eu deixaria de fora a tarefa até que seja necessário.Se você nunca esteve naquele pedaço de código, querendo dar uma olhada naquela variável, você não desorganizou seu código desnecessariamente.Quando você se deparar com a necessidade, coloque-a (deve ser uma tarefa trivial). Extrair variável reestruturação).E quando terminar a sessão de depuração, livre-se dela (Variável embutida).Se você estiver depurando tanto - e tanto naquele ponto específico - que está cansado de refatorar para frente e para trás, pense em maneiras de evitar essa necessidade;talvez mais testes unitários ajudassem.