variáveis ??locais em construtores não forem seguidas. É este um bug no gdb?
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 ..
Solução
É um bug no GCC, não em GDB.
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.