Índice:
- O que é um depurador?
- Configurando seu programa para usar o depurador
- Parando em um ponto de interrupção
- Retaguarda a execução de um programa
- Examinando variáveis
- Continuando com um programa parado
Vídeo: Programa 74: "Falsos misterios que se creen como reales con Manuel Carballal" 2024
Aprender a usar o depurador é uma das coisas mais importantes que você pode fazer para o seu jogo C ++. O que se segue são as etapas necessárias para definir um ponto de interrupção, interromper seu programa, examinar algumas variáveis e retomar o programa.
A partir da Primavera de 2014, Código:: Blocks não se integra com o depurador para o Mac, então, se você é um usuário do Mac, esses exemplos podem não funcionar para você.
O que é um depurador?
Antes de ir mais longe, pode ajudar se você entender o que é um depurador. Um depurador é um programa separado que permite que você controle seu programa de execução. Especificamente, você permite interromper a execução do programa em linhas específicas de código, examinar o valor das variáveis, alterar o valor das variáveis e retomar a execução do programa.
O depurador GNU possui uma interface de linha de comando que é difícil de lembrar e difícil de usar (essa é uma combinação vencedora se você já ouviu uma). Felizmente, Código:: Blocks fornece uma interface gráfica quase perfeita para o depurador GNU. Enquanto você clica nas janelas do editor e ativa os menus suspensos, Código:: Blocos envia comandos encriptados para o depurador em segundo plano e depois interpreta e exibe graficamente os resultados. Não é ótimo quando dois programas chit-chat em segundo plano para salvar você trabalha?
A melhor maneira de aprender sobre o depurador é apenas seguir esses exemplos.
Configurando seu programa para usar o depurador
Você precisa criar seu programa usando configurações especiais do compilador se você pretende executá-lo sob controle do depurador. A maneira mais fácil de fazer isso é exatamente no início, quando você cria seu projeto pela primeira vez. Depois de especificar que deseja criar um aplicativo de console e fornecer o nome do programa, o código:: blocos irá perguntar se deseja criar seu programa na configuração de depuração, configuração de versão ou ambos, conforme mostrado na Figura 1. Certifique-se de que a configuração de depuração esteja habilitada.
Um programa na configuração de depuração inclui muita informação extra que o depurador precisa para fazer sua mágica. Esta informação inclui
-
O endereço de cada linha de código-fonte C ++
-
O endereço de cada variável
-
Os nomes e maquiagem de cada classe em seu programa
Todas essas informações do depurador adicionam muito volume para o programa executável - centenas de kilobytes ou mais. Este espaço é totalmente desnecessário se você não pretende executar o programa sob controle do depurador, então Code:: Blocks oferece a opção de criar executáveis sem essas informações no que é conhecido como configuração de versão.Os programas de lançamento são menores, carregam mais rapidamente e até executam mais rapidamente.
Se você habilitar as configurações de Debug e Release em seu projeto, então você escolherá em tempo de compilação o tipo de executável que você está tentando construir.
Existem duas diferenças entre as configurações Debug e Release:
-
A configuração Debug inclui a opção de compilador -g .
Esta opção informa o compilador para incluir informações de símbolos no executável final. Isto é tudo o que mencionado acima - o endereço de cada linha de código e de cada variável, bem como uma descrição de cada classe usada em seu programa.
-
O otimizador de código está desativado na configuração de depuração e ativado na configuração de versão.
O otimizador de código GNU gera programas que executam mais rápido, mas faz isso movendo as instruções de maneiras que podem ser bastante confusas quando você está depurando seu programa. A configuração de lançamento não inclui a opção -g e permite algum nível de otimização através da inclusão da opção -O .
Certifique-se de que você está construindo o lançamento Debug, selecionando Build → Select Target → Debug, conforme mostrado na Figura 2.
Figura 2: Você ainda precisa se certificar de que está criando o executável devolvível, mesmo se você ativou a Configuração de Depuração quando criou seu projeto.Reconstrua seu programa selecionando Criar → Reconstruir.
Parando em um ponto de interrupção
Para definir um ponto de interrupção, basta clicar na área apenas à direita do número da linha - esta área é conhecida no Código:: Bloqueia a linguagem como a calha . Não só a linha aparece uma cor diferente, indicando que o editor a selecionou, mas um pequeno sinal de parada aparece na calha, conforme mostrado na Figura 3. Esta é uma indicação de que um ponto de interrupção foi configurado na linha 11.
Figura 3: Código:: Blocos usa um pequeno sinal de parada para indicar quando um ponto de interrupção está configurado.Você pode definir tantos pontos de interrupção quanto quiser ao mesmo tempo, mas esse ponto de interrupção será bom para este exemplo.
Aqui, você pode iniciar o programa usando a opção Debug → Start / Continue mostrada na Figura 4.
Figura 4: Execução de início (ou currículo) do seu programa usando a opção de menu Depurar-> Iniciar / Continuar.O programa inicia a execução como normal, mas pára quase que imediatamente com uma pequena flecha amarela apontando para a Linha 11 como mostrado na Figura 5. Além disso, uma janela em branco que normalmente contém a saída do programa aparece. Nada aparece na saída do programa porque a linha 11 ainda não foi executada.
Figura 5: A execução do programa pára logo que o programa encontra um ponto de interrupção.Uau! Isso é legal.
Retaguarda a execução de um programa
Você pode definir um ponto de interrupção na próxima linha e selecionar Debug → Iniciar / Continuar para continuar a executar o programa para a próxima linha se desejar; No entanto, uma vez que é uma coisa tão comum, Código:: Blocks fornece a opção Debug → Next Line, que significa "Execute o programa para a próxima linha."
Fazer isso faz com que o programa instantaneamente pisque quando o controle passa para o programa apenas o tempo suficiente para executar a linha 11 antes de parar novamente, como mostrado na Figura 6.
Figura 6: Executar o comando Next Line causa o depurador para executar uma linha no programa.Você pode repetir este processo com a frequência desejada, efetivamente, pisando o caminho através do programa.
Quando você chega a uma chamada de função, Next Line permanece na função atual, executando toda a função como se fosse apenas uma única linha (que é nesse nível). Se você deseja passar o controle para a chamada de função, selecione Debug → Step Into em vez disso. Isso funciona apenas para funções para as quais você possui o código-fonte - isso não funciona muito bem para funções de biblioteca C ++.
Sempre que você se cansar de dar um passo em frente, você pode encerrar o programa selecionando Debug → Stop Debugger. Isso não só interrompe o depurador, mas também pára o seu programa.
Examinando variáveis
Um único passo no seu programa é uma ótima maneira de ter uma idéia de onde seu programa está indo, mas pode ser difícil entender o porquê, a menos que você possa examinar as variáveis que está usando para tomar decisões. Por exemplo, quando você soltar o programa de exemplo, você pode notar que o controle não entra no loop para . Por que é que?
Você interrompe o programa selecionando Debug → Stop Debugger ou pressionando Shift + F8 e reiniciando selecionando Debug → Start / Continue ou pressionando F8. Single-step, selecionando Debug → Next Line ou pressionando F7 até que a execução atinja o início do loop para .
Desta vez, verifique se a janela Assinatura está visível selecionando Debug → Depurar janelas → Relógios. Uma janela como a da Figura 7 aparece mostrando os valores dos argumentos e quaisquer variáveis locais. Observe que nNumberofArgs é 1, apenas o nome do próprio programa. Uma vez que eu comece com um valor de 1, o loop nunca será executado. Adicione as variáveis de relógio pszArgs [0] e pszArgs [1] para ver o que eles contêm: o nome do programa e um nulo. Aha! O programa não tem argumentos para iterar.
Figura 7: A janela Watch permite ao programador visualizar o valor das variáveis.Você pode alterar os argumentos para o programa selecionando Projeto → Definir argumentos dos programas. Nesta janela, você pode colocar os argumentos que você deseja.
Observe que a janela Watch me mostra o nome da variável, seu tipo e seu valor. Você não pode alterar seu tipo, mas você pode mudar seu valor a partir desta janela, se desejar. Alterar o valor de nNumberofArgs não é muito útil, mas às vezes alterar o valor de uma variável me permite forçar a execução por um caminho diferente apenas para ver o que pode acontecer.
Continuando com um programa parado
Um truque para lembrar é que às vezes pode confundir-se com o motivo pelo qual um programa é interrompido. Nem todos os programas que estão parados estão sob o controle do depurador. Às vezes, eles estão aguardando a entrada do usuário.
Para ver este efeito, passo único o programa PrintArgs até o controle atingir a linha 26.Quando você seleciona a Linha seguinte, o cursor desaparece, como mostrado na Figura 8. Gone é a agradável seta amarela que lembra de onde você está no programa. O que aconteceu?
Figura 8: O controle parece desaparecer quando o programa está aguardando a entrada do usuário.O que aconteceu é que o programa está esperando por eu pressionar Enter no teclado. Primeiro, você precisa selecionar a janela do programa. Então você pode pressionar Enter (talvez seja necessário fazer isso mais de uma vez). Tendo feito isso, nada parece acontecer na janela do programa porque o controle agora passou para o depurador na janela Código:: Blocos. Quando você seleciona essa janela novamente, você vê a seta amarela reconfortante me dizendo que o Código:: Blocks está de volta ao controle.
Quando você está executando seu programa sob o depurador e o controle parece apenas desaparecer, o programa pode estar aguardando a entrada do teclado. Mude para a janela do programa para ver se é esse o caso. Se assim for, assim que você entrar em algo, o controle retornará ao depurador.