variáveis ??locais em construtores não forem seguidas. É este um bug no gdb?

StackOverflow https://stackoverflow.com/questions/224090

  •  03-07-2019
  •  | 
  •  

Pergunta

Atualmente estou executando gdb versão 6.7.1 no Ubuntu Linux, e trabalhando em um C ++ projeto.

Surpreendentemente eu estava tentando depurar um construtor e eu descobri que as variáveis ??locais declaradas no âmbito do construtor não forem seguidas ou notado por gdb. É isto um bug?

Obrigado por qualquer informação ..

Foi útil?

Solução

É um bug no GCC, não em GDB.

Foi recentemente fixo.

Outras dicas

Se você estiver usando otimização (-O), desativá-lo (retirar a -O ou usar -O0). O compilador é por vezes demasiado inteligente e adivinha uma variável que não é necessário, fazer cálculos em tempo de compilação, alterar o escopo de uma variável, ou vários outros truques.

Note que, mesmo com "nenhuma otimização", algumas otimizações triviais são ainda feito, mas eles não devem interferir muito com a depuração. Além disso, com o uso de inline-pesado de C ++ (incluindo o STL), seu programa pode se tornar muito mais lento sem otimização.

Parece que você está depurando uma compilação otimizada.

O depurador 'sabe' o valor de suas variáveis ??locais, porque o arquivo de símbolo descreve sua localização nas funções pilha quadro.

O depurador pode ler as variáveis ??fora da memória do processo de destino. No entanto, isso requer que o quadro de pilha contém até data cópias das variáveis ??locais. Ao compilar sem otimizações o código gerado será sempre escrever variáveis ??locais volta para seus locais quadro de pilha cada vez que eles são modificados. Isso faz com que a depuração fácil, mas os custos em tempo de execução.

Para uma compilação otimizada o compilador irá frequentemente deduzir que estes passos são desnecessários, e manter um valor num registo CPU durante o tempo que for necessário. Pode muito bem ser que a variável local nunca fica um valor escrito para a pilha em tudo. O depurador, neste caso, não tem como rastrear o valor da variável, mas também não sabe disso e muitas vezes vai reportar os dados da pilha como se fosse o valor da variável.

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