Parando em e retomar 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 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.

Video: ARRANCAR NA SUBIDA sem deixar o carro Voltar ou Morrer

Na Primavera de 2014, Code :: Blocks não se integra com o depurador para o Mac, por isso, se você é um usuário 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 permite que você 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 clica 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 em segundo plano para salvar você trabalha?

A melhor maneira de aprender sobre o depurador é só seguir estes 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 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 de 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 do 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 estas informações 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ê ativar ambos 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 de depuração inclui o -g opção do compilador.

    Esta opção informa o compilador para incluir informações 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 de lançamento não inclui o -g mudar e permite algum nível de otimização através da inclusão do -O interruptor.

Video: Soldados Desprendidos - Luciano Subirá

Certifique-se de que você está construindo atualmente a liberação de depuração seleccionando Construir → Selecionar Destino → 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 seleccionando Construir → 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, indicando que o editor tenha selecionado, mas um pequeno sinal de parada aparece na calha, 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 o Debug → Start / opção mostrada na Figura 4 Continuar.

Figura 4: Iniciar (ou retomar) a execução do seu programa usando o Debug - & gt; Start / Continue opti de menu
Figura 4: Iniciar (ou retomar) a execução do seu programa usando o Debug-gt; 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 na Linha 11, como mostrado na Figura 5. Além disso, será exibida uma janela em branco que normalmente contêm a 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.

Reiniciando a execução de um programa

Você pode definir um ponto de interrupção na linha seguinte e selecione Debug → Start / Continue para continuar a executar o 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 o Debug → Avançar opção de linha, o que significa, “Execute o programa para a próxima linha.”

Isso faz com que o programa a piscar momentaneamente como o controlo 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 a linha de comando seguinte faz com que o depurador para executar uma linha no programa.
Figura 6: Executar a linha de comando seguinte 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 Linha permanece na função atual, a execução de toda a função como se fosse apenas uma única linha (que é a este nível). Se você quiser 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 → Parar Debugger. Não só este parar o depurador, mas ele pára o seu programa também.

examinando variáveis

Single-stepping através de 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 você single-passo do 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 → Parar Debugger ou pressionando Shift + F8 e reiniciar seleccionando Debug → Start / Continue ou pressionando F8. Single-passo, selecionando Debug → Próxima linha ou pressionando F7 até a execução atinge o início do para ciclo.

Desta vez, certifique-se de que a janela de inspeção é visível, selecionando janelas Debug → Depuração → relógios. Uma janela como a da figura 7 aparece mostrando os valores dos argumentos e todas as variáveis ​​locais. Observe 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 iterar.

Video: Parada e saída em subida sem o carro morrer ou voltar

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 Projeto → 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.

Video: Correção de Falha de atualização do Windows 7

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 uma etapa do programa PrintArgs até que o controle atinge linha 26. Quando você seleciona 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. Então 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 já passou de volta para o depurador na janela Code :: Blocks. Ao selecionar essa janela novamente, você vê 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 apenas 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.


Publicações relacionadas