SlideShare une entreprise Scribd logo
1  sur  5
3. Poner a punto el programa mediante el uso de un editor de
lenguaje de programación estructurado.
3.1 Captura y edición del programa.
Para tomar datos de la entrada estándar (teclado)
Scanf (texto, variable);
Y para imprimir por pantalla:
Printf (texto, variable);
Texto sera una cadena que contendrá lo que tu quieras y en alguna parte debes especificar donde
leeras/escribiras el dato y su tipo.
Para leer un entero por ejemplo:
Scanf ("%d", &edad);
Para escribir en pantalla:
Printf ("Se han procesado %d argumentos.n", i3);
Si quieres leer de un dispositivo entonces tienes que abrir el fichero que representa ese dispositivo y leer
del fichero ya que en C los dispositivos son tratados como ficheros.
Las estructuras son el segundo tipo de datos estructurados que veremos (valga la redundancia).
Al contrario que los arrays, las estructuras nos permiten agrupar varios datos, que mantengan algún tipo
de relación, aunque sean de distinto tipo, permitiendo manipularlos todos juntos, usando un mismo
identificador, o cada uno por separado.
Las estructuras son llamadas también muy a menudo registros, o en inglés records. Tienen muchos
aspectos en común con los registros usados en bases de datos. Y siguiendo la misma analogía, cada
objeto de una estructura se denomina a menudo campo, o Field.
Sintaxis:
Struct [<identificador>] {
[<Tipo><nombre_objeto> [, <nombre_objeto>,...]];
} [<Objeto estructura> [, <objeto estructura>,...];
3.2 Compilar el programa. Depurar el programa. Ejecutar el programa.
Si se utiliza un entorno de desarrollo, será posible compilar directamente desde el entorno, mediante un
botón o una combinación de teclas.
Si se ejecuta el compilador desde la línea de comandos, la línea será distinta según el compilador utilizado.
A continuación algunos ejemplos de ciertos comandos según el compilador:
En Turbo C de Borland es: tcc hola.c
En C++ de Borland: bcc hola.c
En Visual C de Microsoft: cl hola.c
En GNU gcc: gcc hola.c o cc hola.c
El C de Zortech: ztc hola.c
Siempre hay que tener en cuenta que los ordenadores hacen sólo aquello que nosotros les decimos que
hagan: si los programas no funcionan es porque no los hemos diseñado bien o porque hemos cometido
algún error, y no porque el compilador o el ordenador no funcionen correctamente.
Debemos tener siempre esto en mente, y una vez que se nos ha pasado el mal humor después de analizar
y pensar durante mucho tiempo sobre nuestros algoritmos y programas, sin obtener resultados, debemos
reflexionar y volver al problema. Como programadores debemos tener la sangre fría y reconocer que se
trata de un error nuestro. Es cierto: no siempre es así, a veces algunas funciones de bibliotecas que
usamos pueden tener bugs, pero esto suele ser una excepción.
Un modo de buscar errores de programación es convertirnos en un ordenador y ejecutar el programa que
hemos escrito nosotros mismos. Esto suele ser lento y laborioso. Además, no nos engañemos, nosotros sí
cometemos errores al ejecutar programas, cosa que no suele hacer el ordenador. Este sistema, salvo en el
caso de programas sencillos, no suele funcionar.
Otro método es partir de datos conocidos y ejecutar el programa, para llegar a resultados también
conocidos, o al menos que se puedan calcular. Frecuentemente se puede deducir dónde está el error en
función de los errores obtenidos. Este método tampoco es demasiado útil con programas que manejen
muchas variables o parámetros.
Otras veces podemos usar los mensajes de error que nos proporciona el sistema, pero en general (al
menos a mi me pasa), esos mensajes no suelen arrojar mucha luz.
Otra opción, que es la que nos ocupa en este artículo, consiste en depurar el programa usando una
aplicación creada con este fin. Me estoy refiriendo al "debugger" o depurador, que normalmente se incluye
en casi todos los entornos de programación.
Un depurador es una aplicación que permite colocar puntos de parada, inspeccionar variables o ejecutar un
programa paso a paso, con el fin de buscar errores.
Durante el periodo de aprendizaje, esta es mi opinión, no se debería abusar de los depuradores. Creo que
es mejor, para asentar bien las bases, depurar los programas usando cualquiera de los métodos anteriores,
o incluso, mientras se hacen programas sencillos, pocas veces debería ser necesario depurar programas, y
se deberían centrar los esfuerzos en un diseño correcto.
Sin embargo, a medida que nuestros programas se van complicando, las situaciones no previstas en
nuestro diseño tienen a hacerse más frecuentes. El diseño es algo que hay que entrenar y perfeccionar, y
un depurador puede ayudarnos a corregir nuestros errores de diseño. Con el tiempo veremos que cada vez
los necesitamos menos, y que dedicamos más tiempo a un buen diseño y menos a poner "parches" a
nuestros programas.
El depurador de Dev-C++
^
Dev-C++ contiene un depurador, no demasiado avanzado, pero sí lo suficiente como para resultar útil.
Los programas no pueden ser depurados siempre, antes deben cumplir determinadas condiciones. La
primera es que se pueda obtener un ejecutable. Si no llegamos a eso los errores serán de compilación o de
enlazado, y un depurador no tiene sentido hasta que se solucionen todos esos problemas.
La segunda condición es que el fichero ejecutable contenga la información para la depuración. Un
ejecutable que no contenga esa información se puede depurar, pero sólo en ensamblador, y no con el
depurador que incluye Dev-C++. La información de depuración consiste en el propio fichero fuente, y los
lazos que unen cada una de las instrucciones del programa y variables, con las resultantes de compilar el
programa, de modo que el depurador pueda saber a qué instrucciones de código máquina corresponden
cada instrucción de C/C++. Y también a qué direcciones de memoria corresponde cada variable, asi como
su tipo.
Para que el compilador añada esa información al programa ejecutable hay que indicar al enlazador que lo
haga. Dev-C++ es lo bastante "listo" como para hacer esto de forma automática, pero no está de más
que sepamos cómo hacerlo nosotros. Sobre todo porque dicha información aumenta considerablemente el
tamaño del ejecutable, y una vez depurado, deberíamos eliminarla para crear una versión final.
Para hacer que el enlazador incluya o no la información del depurador debemos acceder a las "Opciones
del Compilador", que se encuentran en el menú de "Herramientas", y, como se ve en el siguiente gráfico,
en la pestaña "Configuración" del cuadro de diálogo de "Opciones del Compilador", en las opciones del
"linker". Si activamos la opción "Generar Información de Debug", dicha información se añadirá la próxima
vez que compilemos y enlacemos el programa con éxito. Si la desactivamos, se eliminará, del mismo modo,
después de compilar y enlazar el programa.
La tercera condición es colocar algún punto de parada en la parte del programa que queremos depurar.
Los puntos de parada indican al depurador que detenga la ejecución del programa y devuelvan el control
al usuario, es decir, a nosotros. Una vez detenido el programa podremos inspeccionar variables,
modificarlas, continuar la ejecución, o seguir ejecutando el programa sentencia a sentencia.
Colocar un punto de parada
^
Hay dos formas de activar un punto de parada, breakpoint. La más sencilla es pulsar con el ratón en la
zona del margen junto a la línea en la que queremos situar el pulto de parada. Otra forma es situar el
cursor en la línea en que queremos situar el punto de parada y usar el menú "Depurar->Añadir/Quitar
punto de Ruptura".
En cualquiera de los casos, se visualizará la línea con fondo rojo, y un icono rojo con una 'V' verde en
su interior en la zona del margen:
Para eliminar un punto de parada se procede del mismo modo.
Ejecutar un programa en modo de depuración
^
De nuevo hay varias formas de hacer esto. Una consiste en pulsar el icono en forma de 'V' en la barra
de herramientas. El mismo icono está en la parte inferior, en la pestaña de "Depurar", al activar esta
pestaña podemos acceder al icono de "Depurar", por último, también podemos hacerlo mediante el menú
"Depurar->Depurar", o por el atajo, pulsando la tecla [F8].
En cualquier caso, el programa se ejecutará normalmente hasta alcanzar un punto de parada. En ese
momento el control vuelve al entorno de Dev-C++ y se muestra la línea de ejecución actual con fondo
azul y con un icono en forma de flecha en el margen:
Otra variante de punto de parada consiste en situar el cursor en la línea hasta la que queremos que se
ejecute el programa y pulsar "Ir al cursor". Esto trabaja igual que si hubiéramos situado un punto de
parada en esa línea, y lo borráramos una vez alcanzado. Pero cuidado, el resto de los puntos de parada
siguen activos, si se alcanza uno de ellos antes que la posición del cursor, el programa parará en ese
punto.
Parámetros
^
Si nuestro programa necesita recibir parámetros desde la línea de programa, podemos suministrarlos
mediante la opción del menú "Depurar->Parámetros...". Esto nos permite simular una orden desde la
consola con la lista de parámetros que prefiramos.
Ejecución paso a paso
^
A partir de aquí podemos optar por ejecutar el programa hasta el siguiente punto de parada, pulsando
"Saltar paso", o reanudar la ejecución paso a paso o ejecutar la siguiente sentencia, mediante "siguiente
paso".
La diferencia entre "siguiente paso" y "paso a paso" es sutil pero importante. La primera opción ejecuta
cada sentencia como un único paso, por ejemplo, si tenemos una sentencia como:
for(int i=0; i < 12; i++) x[i] = i;
"Siguiente paso" la ejecutará de una sola vez, mientras que "paso a paso" ejecutará cada una de las
iteraciones.
Si la sentencia contiene una llamada a una función, "siguiente paso" la ejecutará como una sentencia
única, y "paso a paso" transferirá la ejecución al interior de la función y ejecutará sus sentencias paso a
paso.

Contenu connexe

Tendances (15)

Introduccion mplab
Introduccion mplabIntroduccion mplab
Introduccion mplab
 
Prac fi 06
Prac fi 06Prac fi 06
Prac fi 06
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Apuntes de c
Apuntes de cApuntes de c
Apuntes de c
 
Pseint Leer Y Escribir
Pseint Leer Y EscribirPseint Leer Y Escribir
Pseint Leer Y Escribir
 
Tutorial mplab 6x[1]
Tutorial mplab 6x[1]Tutorial mplab 6x[1]
Tutorial mplab 6x[1]
 
Uso Mplab
Uso MplabUso Mplab
Uso Mplab
 
Naturaleza y evolucion de la tecnologia
Naturaleza y evolucion de la tecnologiaNaturaleza y evolucion de la tecnologia
Naturaleza y evolucion de la tecnologia
 
Practicas bloque 1
Practicas bloque 1Practicas bloque 1
Practicas bloque 1
 
P01.Desarrollo de aplicaciones con mplab
P01.Desarrollo de aplicaciones con mplabP01.Desarrollo de aplicaciones con mplab
P01.Desarrollo de aplicaciones con mplab
 
Informatica
InformaticaInformatica
Informatica
 
Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02Unidad3 130504222102-phpapp02
Unidad3 130504222102-phpapp02
 
Como Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con MplabComo Escribir Un Programa Y Compilarlo Con Mplab
Como Escribir Un Programa Y Compilarlo Con Mplab
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Matlab 2 Capitulo 2
Matlab 2 Capitulo 2Matlab 2 Capitulo 2
Matlab 2 Capitulo 2
 

En vedette (16)

Job Description - HR Clerk 1
Job Description -  HR Clerk 1Job Description -  HR Clerk 1
Job Description - HR Clerk 1
 
Scopus datos-presentación
Scopus datos-presentaciónScopus datos-presentación
Scopus datos-presentación
 
10 claves 7 (4)
10 claves 7 (4)10 claves 7 (4)
10 claves 7 (4)
 
Deserción..
Deserción..Deserción..
Deserción..
 
Egtmkcu
EgtmkcuEgtmkcu
Egtmkcu
 
Català
CatalàCatalà
Català
 
Paralímpicos Río 2016
Paralímpicos Río 2016Paralímpicos Río 2016
Paralímpicos Río 2016
 
Gaceta oct 2015
Gaceta oct 2015Gaceta oct 2015
Gaceta oct 2015
 
AMOL BHASIN CV M3(136)
AMOL BHASIN CV M3(136)AMOL BHASIN CV M3(136)
AMOL BHASIN CV M3(136)
 
Backup
BackupBackup
Backup
 
Crea tu CV
Crea tu CVCrea tu CV
Crea tu CV
 
Consejo tecnico escolar 2015 2016 secundaria
Consejo tecnico escolar 2015 2016 secundariaConsejo tecnico escolar 2015 2016 secundaria
Consejo tecnico escolar 2015 2016 secundaria
 
Lee Greenfield CV 04_01_16
Lee Greenfield CV 04_01_16Lee Greenfield CV 04_01_16
Lee Greenfield CV 04_01_16
 
Mi familia
Mi familiaMi familia
Mi familia
 
Vinaya pitaka
Vinaya pitakaVinaya pitaka
Vinaya pitaka
 
Steve jobs
Steve jobsSteve jobs
Steve jobs
 

Similaire à Unidad 3

PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLPASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLfelipeforero72
 
Resolver problemas con_una_computadora
Resolver problemas con_una_computadoraResolver problemas con_una_computadora
Resolver problemas con_una_computadoraFaridCastillo2
 
Resolver problemas con_una_computadora
Resolver problemas con_una_computadoraResolver problemas con_una_computadora
Resolver problemas con_una_computadoraJulioVizcarra5
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujocasdilacol
 
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Dulcevelazquez6
 
Fpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.comFpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.comFresyMetal
 
Etapas del desarrolo de un programa
Etapas del desarrolo de un programaEtapas del desarrolo de un programa
Etapas del desarrolo de un programazeta2015
 
Srahi garcia ruiz_2am_programacion2
Srahi garcia ruiz_2am_programacion2Srahi garcia ruiz_2am_programacion2
Srahi garcia ruiz_2am_programacion2Sarahi Garcia Ruiz
 
Diseño de programacion
Diseño de programacion Diseño de programacion
Diseño de programacion Naty Colin
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en cArmando Jori
 
Identificacion del planteamiento del problema
Identificacion del planteamiento del problemaIdentificacion del planteamiento del problema
Identificacion del planteamiento del problemaDavid Sanabria
 
Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Jahir Sanchez Sdval
 
Introducción a Programación I (Clase1).pptx
Introducción a Programación I (Clase1).pptxIntroducción a Programación I (Clase1).pptx
Introducción a Programación I (Clase1).pptxDavidGarca147527
 

Similaire à Unidad 3 (20)

Atix08
Atix08Atix08
Atix08
 
Gaby agudo
Gaby agudoGaby agudo
Gaby agudo
 
PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLPASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
 
Resolver problemas con_una_computadora
Resolver problemas con_una_computadoraResolver problemas con_una_computadora
Resolver problemas con_una_computadora
 
Resolver problemas con_una_computadora
Resolver problemas con_una_computadoraResolver problemas con_una_computadora
Resolver problemas con_una_computadora
 
Diagramas de flujo
Diagramas de flujoDiagramas de flujo
Diagramas de flujo
 
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
 
Fpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.comFpr Tema 1 www.fresymetal.com
Fpr Tema 1 www.fresymetal.com
 
Etapas del desarrolo de un programa
Etapas del desarrolo de un programaEtapas del desarrolo de un programa
Etapas del desarrolo de un programa
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Srahi garcia ruiz_2am_programacion2
Srahi garcia ruiz_2am_programacion2Srahi garcia ruiz_2am_programacion2
Srahi garcia ruiz_2am_programacion2
 
Clase 1 lógica de programación
Clase 1 lógica de programaciónClase 1 lógica de programación
Clase 1 lógica de programación
 
Xd1
Xd1Xd1
Xd1
 
Diseño de programacion
Diseño de programacion Diseño de programacion
Diseño de programacion
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en c
 
Identificacion del planteamiento del problema
Identificacion del planteamiento del problemaIdentificacion del planteamiento del problema
Identificacion del planteamiento del problema
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33Aplicar los pricipios de programacion en la solucion de problemas 33
Aplicar los pricipios de programacion en la solucion de problemas 33
 
Introducción a Programación I (Clase1).pptx
Introducción a Programación I (Clase1).pptxIntroducción a Programación I (Clase1).pptx
Introducción a Programación I (Clase1).pptx
 

Plus de Carlos Rangel Flores (20)

Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Practica 22
Practica 22Practica 22
Practica 22
 
Practica 23
Practica 23Practica 23
Practica 23
 
Practica 21
Practica 21Practica 21
Practica 21
 
Practica 20
Practica 20Practica 20
Practica 20
 
Practica 19
Practica 19Practica 19
Practica 19
 
Practica 18
Practica 18Practica 18
Practica 18
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
Practica 17
Practica 17Practica 17
Practica 17
 
Practica 16
Practica 16Practica 16
Practica 16
 
Practica 15
Practica 15Practica 15
Practica 15
 
Practica14
Practica14Practica14
Practica14
 
Practica13
Practica13Practica13
Practica13
 
4 2conceptosinicialesdeprogramacion-121003195205-phpapp02
4 2conceptosinicialesdeprogramacion-121003195205-phpapp024 2conceptosinicialesdeprogramacion-121003195205-phpapp02
4 2conceptosinicialesdeprogramacion-121003195205-phpapp02
 
Unidad4
Unidad4Unidad4
Unidad4
 
Practica 11
Practica 11Practica 11
Practica 11
 
Practica 10
Practica 10Practica 10
Practica 10
 
Practica 9
Practica 9Practica 9
Practica 9
 
Practica 8
Practica 8Practica 8
Practica 8
 

Unidad 3

  • 1. 3. Poner a punto el programa mediante el uso de un editor de lenguaje de programación estructurado. 3.1 Captura y edición del programa. Para tomar datos de la entrada estándar (teclado) Scanf (texto, variable); Y para imprimir por pantalla: Printf (texto, variable); Texto sera una cadena que contendrá lo que tu quieras y en alguna parte debes especificar donde leeras/escribiras el dato y su tipo. Para leer un entero por ejemplo: Scanf ("%d", &edad); Para escribir en pantalla: Printf ("Se han procesado %d argumentos.n", i3); Si quieres leer de un dispositivo entonces tienes que abrir el fichero que representa ese dispositivo y leer del fichero ya que en C los dispositivos son tratados como ficheros. Las estructuras son el segundo tipo de datos estructurados que veremos (valga la redundancia). Al contrario que los arrays, las estructuras nos permiten agrupar varios datos, que mantengan algún tipo de relación, aunque sean de distinto tipo, permitiendo manipularlos todos juntos, usando un mismo identificador, o cada uno por separado. Las estructuras son llamadas también muy a menudo registros, o en inglés records. Tienen muchos aspectos en común con los registros usados en bases de datos. Y siguiendo la misma analogía, cada objeto de una estructura se denomina a menudo campo, o Field. Sintaxis: Struct [<identificador>] { [<Tipo><nombre_objeto> [, <nombre_objeto>,...]]; } [<Objeto estructura> [, <objeto estructura>,...]; 3.2 Compilar el programa. Depurar el programa. Ejecutar el programa. Si se utiliza un entorno de desarrollo, será posible compilar directamente desde el entorno, mediante un botón o una combinación de teclas. Si se ejecuta el compilador desde la línea de comandos, la línea será distinta según el compilador utilizado. A continuación algunos ejemplos de ciertos comandos según el compilador: En Turbo C de Borland es: tcc hola.c En C++ de Borland: bcc hola.c En Visual C de Microsoft: cl hola.c
  • 2. En GNU gcc: gcc hola.c o cc hola.c El C de Zortech: ztc hola.c Siempre hay que tener en cuenta que los ordenadores hacen sólo aquello que nosotros les decimos que hagan: si los programas no funcionan es porque no los hemos diseñado bien o porque hemos cometido algún error, y no porque el compilador o el ordenador no funcionen correctamente. Debemos tener siempre esto en mente, y una vez que se nos ha pasado el mal humor después de analizar y pensar durante mucho tiempo sobre nuestros algoritmos y programas, sin obtener resultados, debemos reflexionar y volver al problema. Como programadores debemos tener la sangre fría y reconocer que se trata de un error nuestro. Es cierto: no siempre es así, a veces algunas funciones de bibliotecas que usamos pueden tener bugs, pero esto suele ser una excepción. Un modo de buscar errores de programación es convertirnos en un ordenador y ejecutar el programa que hemos escrito nosotros mismos. Esto suele ser lento y laborioso. Además, no nos engañemos, nosotros sí cometemos errores al ejecutar programas, cosa que no suele hacer el ordenador. Este sistema, salvo en el caso de programas sencillos, no suele funcionar. Otro método es partir de datos conocidos y ejecutar el programa, para llegar a resultados también conocidos, o al menos que se puedan calcular. Frecuentemente se puede deducir dónde está el error en función de los errores obtenidos. Este método tampoco es demasiado útil con programas que manejen muchas variables o parámetros. Otras veces podemos usar los mensajes de error que nos proporciona el sistema, pero en general (al menos a mi me pasa), esos mensajes no suelen arrojar mucha luz. Otra opción, que es la que nos ocupa en este artículo, consiste en depurar el programa usando una aplicación creada con este fin. Me estoy refiriendo al "debugger" o depurador, que normalmente se incluye en casi todos los entornos de programación. Un depurador es una aplicación que permite colocar puntos de parada, inspeccionar variables o ejecutar un programa paso a paso, con el fin de buscar errores. Durante el periodo de aprendizaje, esta es mi opinión, no se debería abusar de los depuradores. Creo que es mejor, para asentar bien las bases, depurar los programas usando cualquiera de los métodos anteriores, o incluso, mientras se hacen programas sencillos, pocas veces debería ser necesario depurar programas, y se deberían centrar los esfuerzos en un diseño correcto. Sin embargo, a medida que nuestros programas se van complicando, las situaciones no previstas en nuestro diseño tienen a hacerse más frecuentes. El diseño es algo que hay que entrenar y perfeccionar, y un depurador puede ayudarnos a corregir nuestros errores de diseño. Con el tiempo veremos que cada vez los necesitamos menos, y que dedicamos más tiempo a un buen diseño y menos a poner "parches" a nuestros programas. El depurador de Dev-C++ ^ Dev-C++ contiene un depurador, no demasiado avanzado, pero sí lo suficiente como para resultar útil.
  • 3. Los programas no pueden ser depurados siempre, antes deben cumplir determinadas condiciones. La primera es que se pueda obtener un ejecutable. Si no llegamos a eso los errores serán de compilación o de enlazado, y un depurador no tiene sentido hasta que se solucionen todos esos problemas. La segunda condición es que el fichero ejecutable contenga la información para la depuración. Un ejecutable que no contenga esa información se puede depurar, pero sólo en ensamblador, y no con el depurador que incluye Dev-C++. La información de depuración consiste en el propio fichero fuente, y los lazos que unen cada una de las instrucciones del programa y variables, con las resultantes de compilar el programa, de modo que el depurador pueda saber a qué instrucciones de código máquina corresponden cada instrucción de C/C++. Y también a qué direcciones de memoria corresponde cada variable, asi como su tipo. Para que el compilador añada esa información al programa ejecutable hay que indicar al enlazador que lo haga. Dev-C++ es lo bastante "listo" como para hacer esto de forma automática, pero no está de más que sepamos cómo hacerlo nosotros. Sobre todo porque dicha información aumenta considerablemente el tamaño del ejecutable, y una vez depurado, deberíamos eliminarla para crear una versión final. Para hacer que el enlazador incluya o no la información del depurador debemos acceder a las "Opciones del Compilador", que se encuentran en el menú de "Herramientas", y, como se ve en el siguiente gráfico, en la pestaña "Configuración" del cuadro de diálogo de "Opciones del Compilador", en las opciones del "linker". Si activamos la opción "Generar Información de Debug", dicha información se añadirá la próxima vez que compilemos y enlacemos el programa con éxito. Si la desactivamos, se eliminará, del mismo modo, después de compilar y enlazar el programa. La tercera condición es colocar algún punto de parada en la parte del programa que queremos depurar. Los puntos de parada indican al depurador que detenga la ejecución del programa y devuelvan el control al usuario, es decir, a nosotros. Una vez detenido el programa podremos inspeccionar variables, modificarlas, continuar la ejecución, o seguir ejecutando el programa sentencia a sentencia.
  • 4. Colocar un punto de parada ^ Hay dos formas de activar un punto de parada, breakpoint. La más sencilla es pulsar con el ratón en la zona del margen junto a la línea en la que queremos situar el pulto de parada. Otra forma es situar el cursor en la línea en que queremos situar el punto de parada y usar el menú "Depurar->Añadir/Quitar punto de Ruptura". En cualquiera de los casos, se visualizará la línea con fondo rojo, y un icono rojo con una 'V' verde en su interior en la zona del margen: Para eliminar un punto de parada se procede del mismo modo. Ejecutar un programa en modo de depuración ^ De nuevo hay varias formas de hacer esto. Una consiste en pulsar el icono en forma de 'V' en la barra de herramientas. El mismo icono está en la parte inferior, en la pestaña de "Depurar", al activar esta pestaña podemos acceder al icono de "Depurar", por último, también podemos hacerlo mediante el menú "Depurar->Depurar", o por el atajo, pulsando la tecla [F8]. En cualquier caso, el programa se ejecutará normalmente hasta alcanzar un punto de parada. En ese momento el control vuelve al entorno de Dev-C++ y se muestra la línea de ejecución actual con fondo azul y con un icono en forma de flecha en el margen: Otra variante de punto de parada consiste en situar el cursor en la línea hasta la que queremos que se ejecute el programa y pulsar "Ir al cursor". Esto trabaja igual que si hubiéramos situado un punto de parada en esa línea, y lo borráramos una vez alcanzado. Pero cuidado, el resto de los puntos de parada siguen activos, si se alcanza uno de ellos antes que la posición del cursor, el programa parará en ese punto. Parámetros ^ Si nuestro programa necesita recibir parámetros desde la línea de programa, podemos suministrarlos mediante la opción del menú "Depurar->Parámetros...". Esto nos permite simular una orden desde la consola con la lista de parámetros que prefiramos. Ejecución paso a paso ^
  • 5. A partir de aquí podemos optar por ejecutar el programa hasta el siguiente punto de parada, pulsando "Saltar paso", o reanudar la ejecución paso a paso o ejecutar la siguiente sentencia, mediante "siguiente paso". La diferencia entre "siguiente paso" y "paso a paso" es sutil pero importante. La primera opción ejecuta cada sentencia como un único paso, por ejemplo, si tenemos una sentencia como: for(int i=0; i < 12; i++) x[i] = i; "Siguiente paso" la ejecutará de una sola vez, mientras que "paso a paso" ejecutará cada una de las iteraciones. Si la sentencia contiene una llamada a una función, "siguiente paso" la ejecutará como una sentencia única, y "paso a paso" transferirá la ejecución al interior de la función y ejecutará sus sentencias paso a paso.