Parando en y reanudar desde un punto de interrupción
Aprender a utilizar el depurador es una de las cosas más importantes que usted puede hacer para su C ++ juego. Lo que sigue son los pasos necesarios para establecer un punto de interrupción, detener su programa, examinar algunas variables, y reanudar el programa.
Conteúdo
A partir de la primavera de 2014, Code :: Blocks no se integra con el depurador para el Mac, así que si usted es un usuario de Mac estos ejemplos puede no funcionar para usted.
¿Qué es un depurador?
Antes de continuar, puede ayudar si usted entiende lo que es un depurador. LA depurador es un programa independiente que le permite controlar su programa de ejecución. Concretamente se le permite detener la ejecución del programa en líneas específicas de código, para examinar el valor de las variables, para cambiar el valor de las variables, y para reanudar la ejecución del programa.
El depurador de GNU tiene una interfaz de línea de comandos que es a la vez difícil de recordar y difícil de usar (que es una combinación ganadora si alguna vez has escuchado una). Afortunadamente, Code :: Blocks proporciona una interfaz gráfica casi perfecta para el depurador de GNU. Mientras que usted hace clic en la ventana del editor y activar los menús desplegables, Code :: Blocks envía comandos crípticos al depurador en el fondo y luego interpreta y muestra gráficamente los resultados. ¿No es genial cuando dos programas de charla en el fondo para salvar usted trabaja?
La mejor manera de aprender sobre el depurador es sólo tienes que seguir estos ejemplos.
Configuración de su programa para utilizar el depurador
Usted necesita para construir su programa usando los ajustes especiales del compilador si la intención de ejecutar el programa bajo el control del depurador. La forma más fácil de hacerlo es desde el principio, cuando se crea el proyecto. Después de haber especificado que desea crear una aplicación de consola y siempre que el nombre del programa, Code :: Blocks le preguntarán si usted quiere construir su programa en la configuración de depuración, la configuración de lanzamiento, o ambos, como se muestra en la Figura 1 . Asegúrese de que la configuración de depuración está habilitada.
Un programa en la configuración de depuración incluye una gran cantidad de información adicional que el depurador necesita para hacer su magia. Esta información incluye
La dirección de cada línea de código fuente de C ++
La dirección de cada variable
Los nombres y el maquillaje de cada clase en su programa
Toda esta información depurador añade mucho volumen al programa ejecutable - cientos de kilobytes o más. Este espacio es totalmente innecesario si no tiene la intención de ejecutar el programa bajo el control del depurador, por lo Code :: Blocks le da la opción de ejecutables edificio sin esta información en lo que se conoce como la configuración de lanzamiento. Programas de liberación son más pequeños, cargue más rápido, e incluso ejecutar más rápido.
Si habilita tanto de depuración y liberación configuraciones en su proyecto, por lo que recibirá para elegir a la hora de construir el tipo de ejecutable que está tratando de construir.
Hay dos diferencias entre las configuraciones de depuración y de la versión:
La configuración de depuración incluye el -g opción de compilador.
Esta opción le dice al compilador para incluir información de símbolos en el ejecutable final. Esto es todo eso se ha mencionado anteriormente - la dirección de cada línea de código y de todas las variables, así como una descripción de cada clase se utiliza en su programa.
El optimizador de código está desactivada en la configuración de depuración y activada en la configuración de lanzamiento.
El optimizador de código GNU genera programas que se ejecutan más rápido, pero lo hace por instrucciones de moverse en formas que pueden ser bastante confuso cuando estás depurar su programa. La configuración de liberación no incluye la -g cambiar y permite un cierto nivel de optimización a través de la inclusión de la -O interruptor.
Asegúrese de que usted está construyendo la liberación de depuración seleccionando Build-Select Target-depuración, como se muestra en la Figura 2.
Reconstruir su programa seleccionando Build-Reconstruir.
Al detenerse en un punto de interrupción
Para establecer un punto de interrupción, simplemente haga clic en el área justo a la derecha del número de línea - esta zona es conocida en Code :: Blocks jerga como el comedero. No sólo la línea aparece un color diferente, lo que indica que el editor ha seleccionado, pero una pequeña muestra de la parada aparece en el canal, como se muestra en la Figura 3. Esta es una indicación de que un punto de interrupción se ha fijado en la línea 11.
Puede configurar tantos puntos de ruptura que desea a la vez, pero este punto de interrupción va a estar bien para este ejemplo.
Aquí, usted puede iniciar el programa utilizando la opción se muestra en la Figura 4 la depuración-Start / Continue.
El programa comienza la ejecución como normal pero se detiene casi inmediatamente con una pequeña flecha apuntando amarillo en la línea 11 como se muestra en la Figura 5. Además, aparece una ventana en blanco que normalmente contiene la salida del programa. Nada aparece en la salida del programa debido a la línea 11 todavía tiene que ejecutar.
¡Guauu! Eso es genial.
Reanudación de la ejecución de un programa
Se podría establecer un punto de interrupción en la línea siguiente y seleccione Depurar-Start / Continue para continuar la ejecución del programa a la línea siguiente si queríamos, sin embargo, ya que esta es una cosa común a hacer, Code :: Blocks proporciona la depuración-Siguiente opción de línea, lo que significa, "Ejecutar el programa a la siguiente línea."
Si lo hace, el programa a parpadear momentáneamente el control pasa al programa el tiempo suficiente para ejecutar la línea 11 antes de llegar a una parada de nuevo, como se muestra en la Figura 6.
Puede repetir este proceso tantas veces como quieras, efectivamente solo pisar mi camino a través del programa.
Cuando se llega a una llamada de función, Next Line queda en la función actual, la ejecución de toda la función como si se tratara de una sola línea (que es en este nivel). Si desea pasar el control a la llamada de función, seleccione Depurar-Step Into lugar. Esto sólo funciona para las funciones para las que tiene el código fuente - esto no funciona muy bien para funciones de C ++ de la biblioteca.
Cada vez que te cansas de un solo paso a paso alrededor, usted puede terminar el programa seleccionando Depurar-Stop depurador. Esto no sólo detener el depurador, pero que se detenga su programa también.
Examinar las variables
Single-paso a paso a través de su programa es una gran manera de tener una idea de dónde está su programa va, pero puede ser difícil de entender por qué a menos que usted puede examinar las variables se utilizan para tomar decisiones. Por ejemplo, cuando un solo paso el programa de ejemplo, puede observar que el control no entra en el para bucle en absoluto. ¿Porque es eso?
Dejas el programa seleccionando Depurar-Stop depurador o presionando Shift + F8 y reiniciar seleccionando Depurar-Start / Continue o presionando F8. Single-step seleccionando Depurar-Línea siguiente o presionar F7 hasta que la ejecución alcanza el comienzo de la para lazo.
Esta vez, asegúrese de que la ventana Inspección es visible seleccionando Depurar-Depuración windows-Relojes. Una ventana como la de la figura 7 aparece mostrando los valores de los argumentos y las variables locales. Observe que nNumberofArgs es 1, sólo el nombre del programa en sí. Desde que se inicia con un valor de 1, el bucle nunca va a ser ejecutado. Añadir los pszArgs variables de reloj [0] y pszArgs [1] para ver lo que contienen: el nombre del programa y un nulo. ¡Ajá! El programa no tiene argumentos para repetir.
Puede cambiar los argumentos para el programa seleccionando Argumentos Proyecto-Set Programas '. En esta ventana, se puede poner lo argumentos que desee.
Observe que la ventana Inspección me muestra el nombre de la variable, su tipo y su valor. No se puede cambiar el tipo, pero puede cambiar su valor desde esta ventana, si lo desea. Cambiar el valor de nNumberofArgs no es muy útil, pero a veces el cambio del valor de una variable me permite forzar la ejecución por un camino diferente sólo para ver lo que podría suceder.
Continuando un programa detenido
Un truco para recordar es que a veces puede ser confuso en cuanto a porqué se detiene un programa. No todos los programas que se detienen están bajo el control del depurador. A veces están a la espera de la entrada del usuario.
Para ver este efecto, de un solo paso el programa PrintArgs hasta que el control alcanza la línea 26. Si selecciona Línea siguiente, el cursor desaparece como se muestra en la Figura 8. Se acabó la flecha amarilla agradable que te recuerda a donde estoy en el programa. ¿Que pasó?
Lo que pasó es que el programa está esperando a que yo pulse Intro en el teclado. En primer lugar, usted tiene que seleccionar la ventana del programa. A continuación, puede pulsar Enter (puede que tenga que hacer esto más de una vez). Una vez hecho esto, nada parece suceder en la ventana del programa ya que el control ha pasado de nuevo al depurador en la ventana de Code :: Blocks. Al seleccionar la ventana de nuevo, se ve la flecha amarilla tranquilizador diciéndome que Code :: Blocks es recuperar el control.
Cuando usted está ejecutando su programa bajo el aparece depuración y control para ir lejos, el programa puede estar esperando para la entrada desde el teclado. Cambiar a la ventana del programa para ver si ese es el caso. Si es así, tan pronto como entras en algo, control volverá de nuevo al depurador.