Parando em e reiniciando a partir de um ponto de interrupção

Aprender a usar o depurador é uma das coisas mais importantes que você pode fazer para o seu jogo de C ++. O que se segue são os passos necessários para definir um ponto de interrupção, parar o seu programa, examinar algumas variáveis, e retomar o programa.

Na Primavera de 2014, Code :: Blocks não se integra com o depurador para o Mac, por isso, se você é um usuário de Mac estes exemplos pode não funcionar para você.

O que é um depurador?

Antes de prosseguir, pode ajudar se você entender o que um depurador é. UMA depurador é um programa separado que lhe permite controlar o seu programa em execução. Especificamente ele permite que você parar a execução do programa em linhas específicas de código, para examinar o valor de variáveis, para alterar o valor de variáveis, e para continuar a execução do programa.

O depurador GNU tem uma interface de linha de comando que é tanto difícil de lembrar e difícil de usar (que é uma combinação vencedora se você já ouviu um). Felizmente, Code :: Blocks fornece uma interface gráfica quase perfeita para o depurador GNU. Enquanto você clicar nas janelas do editor e ativar menus drop-down, Code :: Blocks envia comandos crípticos para o depurador em segundo plano e, em seguida, interpreta e exibe graficamente os resultados. Não é grande quando dois programas de bate-papo no fundo para salvar você trabalha?

A melhor maneira de aprender sobre o depurador é só seguir esses exemplos.

Configurar o seu programa para usar o depurador

Você precisa construir o seu programa usando as configurações especiais do compilador se você pretende executá-lo sob o controle do depurador. A maneira mais fácil de fazer isso é logo no início, quando você criar seu projeto. Depois de ter especificado que você deseja criar um aplicativo do console e forneceu o nome do programa, Code :: Blocks vai perguntar se você quer construir seu programa na configuração de depuração, configuração de lançamento, ou ambos, como mostrado na Figura 1 . Certifique-se de que a configuração de depuração está habilitado.

Figura 1: O Project Wizard lhe dá a opção de especificar uma configuração de depuração quando você crea
Figura 1: O Project Wizard lhe dá a opção de especificar uma configuração de depuração quando você criar o projeto.

Um programa na configuração de depuração inclui uma grande quantidade de informação extra que o depurador precisa para fazer a sua magia. 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 composição de cada classe em seu programa

Toda esta informação depurador adiciona um monte de massa 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 o controle do depurador, então Code :: Blocks lhe dá a opção de executáveis ​​de construção sem esta informação no que é conhecido como configuração de lançamento. programas de libertação são menores, carregar mais rápido, e até mesmo executar mais rápido.

Se você permitir que tanto Debug e Release configurações em seu projeto, então você vai ter que escolher em tempo de compilação que tipo de executável que você está tentando construir.

Há duas diferenças entre as configurações de depuração e versão:

  • A configuração inclui a depuração -g opção de compilador.

    Esta opção informa o compilador para incluir informações de símbolo no executável final. Isso é tudo que o material mencionado acima - o endereço de cada linha de código e de cada variável, bem como uma descrição de todas as classes usadas em seu programa.

  • O otimizador de código é desligado na configuração de depuração e ligado na configuração de lançamento.

    O otimizador de código GNU gera programas que executam mais rápido, mas ele faz isso movendo instruções em torno de maneiras que podem ser um pouco confuso quando você está depurando seu programa. A configuração versão não inclui o -g alternar e permita algum grau de optimização através da inclusão do -O interruptor.

Certifique-se de que você está actualmente a construir a liberação de depuração, selecionando Build-Select Target-Debug, como mostrado na Figura 2.

Figura 2: Você ainda tem que se certificar de que você está construindo o executável debuggable, mesmo se você
Figura 2: Você ainda tem que se certificar de que você está construindo o executável debuggable, mesmo se você habilitado configuração de depuração quando você criou seu projeto.

Reconstruir o seu programa selecionando Construção-Reconstruir.

Parando em um ponto de interrupção

Para definir um ponto de interrupção, basta clicar na área à direita do número da linha - esta área é conhecida no Code :: Blocks linguagem como a calha. Não só a linha aparecer uma cor diferente, o que indica que o editor tem seleccionado, mas um pequeno sinal de paragem aparece na calha, tal como mostrado na Figura 3. Esta é uma indicação de que um ponto de interrupção foi definido na linha 11.

Figura 3: Code :: Blocks usa um sinal bonitinho parada para indicar quando um ponto de interrupção está definido.
Figura 3: Code :: Blocks usa um sinal bonitinho parada para indicar quando um ponto de interrupção está definido.

Você pode configurar como muitos pontos de interrupção como você quer de uma só vez, mas este ponto de interrupção será bom para este exemplo.

Aqui, você pode iniciar o programa usando a opção mostrado na Figura 4 de depuração-Start / Continue.

Figura 4: Iniciar (ou retomar) a execução do seu programa usando Debug ->Iniciar / Continuar opti menu
Figura 4: Iniciar (ou retomar) a execução do seu programa usando o Debug -> opção de menu Iniciar / Continuar.

O programa começa a execução como normal, mas pára quase imediatamente com uma pequena seta apontando amarelo em linha 11 como mostrado na Figura 5. Além disso, aparece uma janela em branco, que normalmente contêm saída do programa. Nada aparece na saída programa porque linha 11 ainda tem que executar.

Figura 5: A execução do programa é interrompida assim que o programa encontrar um ponto de interrupção.
Figura 5: A execução do programa é interrompida assim que o programa encontrar um ponto de interrupção.

Uau! Isso é legal.

Continuar com a execução de um programa

Você pode definir um ponto de interrupção na linha seguinte e selecione Debug-Start / Continuar para continuar a execução do programa para a próxima linha se você queria- no entanto, uma vez que esta é uma coisa tão comum de fazer, Code :: Blocks fornece a depuração-Next opção de linha, o que significa, "Execute o programa para a próxima linha."

Isso faz com que o programa para piscar momentaneamente como o controlo passa para o programa apenas o tempo suficiente para executar a linha 11 antes de chegar a uma parada de novo, como mostrado na Figura 6.

Figura 6: Executar a próxima linha de comando faz com que o depurador para executar uma linha no programa.
Figura 6: Executar a próxima linha de comando faz com que o depurador para executar uma linha no programa.

Você pode repetir esse processo quantas vezes quiser, efetivamente single-pisar o meu caminho através do programa.

Quando você vem para uma chamada de função, Next Line permanece na função atual, a execução de toda a função como se fosse apenas uma única linha (que é neste nível). Se você quer passar o controle para a chamada de função, selecione Debug-Step Into vez. Isso funciona apenas para as funções para as quais você tem o código-fonte - isso não funciona muito bem para funções C ++ biblioteca.

Toda vez que você se cansa de single-pisando ao redor, você pode terminar o programa, selecionando Debug-Stop Debugger. Isto não só parar o depurador, mas ele pára o seu programa também.

examinando variáveis

Single-percorrendo o seu programa é uma ótima maneira de começar uma sensação para onde o programa está indo, mas pode ser difícil entender por que a menos que você pode examinar as variáveis ​​que ele está usando para tomar decisões. Por exemplo, quando um único passo, o programa de exemplo, você pode perceber que o controle não entra no para circuito em tudo. Por que é que?

Você parar o programa selecionando Debug-Stop Debugger ou pressionando Shift + F8 e reiniciar selecionando Debug-Start / Continue ou pressionando F8. Single-passo selecionando Debug-Next Linha ou pressionando F7 até a execução atinge o início do para loop.

Desta vez, certifique-se de que a janela de inspeção é visível, selecionando-depuração de depuração do Windows-Relógios. Uma janela como a da figura 7 aparece mostrando os valores dos argumentos e quaisquer variáveis ​​locais. Note-se que é nNumberofArgs 1, apenas o nome do próprio programa. Desde i começa com um valor de 1, o loop nunca vai ser executado. Adicione as variáveis ​​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 repetir.

Figura 7: A janela de inspeção permite que o programador para ver o valor das variáveis.
Figura 7: A janela de inspeção permite que o programador para ver o valor das variáveis.

Você pode alterar os argumentos para o programa selecionando Argumentos Project-Set Programas '. Nesta janela, você pode colocar qualquer argumentos que você deseja.

Observe que a janela de monitorização mostra-me o nome da variável, seu tipo, e seu valor. Você não pode mudar o seu tipo, mas você pode mudar o seu valor a partir desta janela, se quiser. Alterar o valor de nNumberofArgs não é muito útil, mas às vezes alterando o valor de uma variável permite-me para forçar a execução por um caminho diferente apenas para ver o que pode acontecer.

Dando continuidade a um programa parou

Um truque para lembrar é que às vezes pode ficar confuso a respeito de porque um programa está parado. Nem todos os programas que estão parados estão sob o controle do depurador. Às vezes, eles estão à espera de entrada do usuário.

Para ver este efeito, de um só passo do programa PrintArgs até que o controle atingir a linha 26. Ao selecionar linha seguinte, o cursor desaparece como mostrado na Figura 8. Longe é a seta amarela agradável que você lembra de onde estou no programa. O que aconteceu?

Figura 8: Controle aparece para ir embora quando o programa está aguardando entrada do usuário.
Figura 8: Controle aparece para ir embora quando o programa está aguardando entrada do usuário.

O que aconteceu é que o programa está esperando por mim para pressionar Enter no teclado. Primeiro, você tem que selecionar a janela do programa. Em seguida, você pode pressionar Enter (você pode precisar de fazer isso mais de uma vez). Tendo feito isso, nada parece acontecer na janela do programa porque o controle passou agora de volta para o depurador na janela Code :: Blocks. Ao selecionar essa janela novamente, você verá a seta amarela reconfortante me dizendo que Code :: Blocks está de volta no controle.

Quando você está executando o seu programa sob as aparece depurador e controle para ir embora, o programa pode estar à espera de entrada do teclado. Mudar para a janela do programa para ver se esse é o caso. Se assim for, assim que você digitar algo, o controle vai voltar para o depurador.

menu