1. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INTRODUCCIÓN AL LENGUAJE C
2.2. Depuración de un programa en C
Objetivos
1. Conocer las partes que conforman un programa básico en C.
Rara vez los programas funcionan bien la primera vez que se ejecutan. Los errores
que se producen en los programas han de ser detectados, aislados (fijados) y corregidos.
El proceso de encontrar errores se denomina depuración del programa. La corrección
del error es probablemente la etapa más fácil, siendo la detección y aislamiento del error
las tareas más difíciles.
Existen diferentes situaciones en las cuales se suelen introducir errores en un progra-
ma. Dos de las más frecuentes son:
1. Violación (no cumplimiento) de las reglas gramaticales del lenguaje de alto nivel
en el que se escribe el programa.
2. Los errores en el diseño del algoritmo en el que está basado el programa. Cuando
el compilador detecta un error, visualiza un mensaje de error indicando que se ha
cometido un error y posible causa del error.
Desde el punto de vista conceptual existen tres tipos de errores: sintaxis, lógicos
y de regresión.
2.2.1. Errores de sintaxis
Los errores de sintaxis son aquellos que se producen cuando el programa viola la
sintaxis, es decir, las reglas de gramática del lenguaje. Errores de sintaxis típicos son:
escritura incorrecta de palabras reservadas, omisión de signos de puntuación (comillas,
punto y coma...). Los errores de sintaxis son los más fáciles de fijar, ya que ellos son
detectados y aislados por el compilador.
2.2.2. Errores lógicos
Un segundo tipo de error importante es el error lógico, ya que tal error representa
errores del programador en el diseño del algoritmo y posterior programa. Los errores
lógicos son más difíciles de encontrar y aislar ya que no suelen ser detectados por el
compilador.
Suponga, por ejemplo, que una línea de un programa contiene la sentencia
double peso=densidad * 5.25 * PI * pow(longitud,5)/4.0
pero resulta que el tercer asterisco (operador de multiplicación) es en realidad un signo
+ (operador suma). El compilador no produce ningún mensaje de error de sintaxis ya
que no se ha violado ninguna regla de sintaxis y, por tanto, el compilador no detecta
error y el programa se compilará y ejecutará bien, aunque producirá resultados de valores
incorrectos ya que la fórmula utilizada para calcular el peso contiene un error lógico.
El depurador (debugger) un programa de software diseñado específicamente para
la detección, verificación y corrección de errores, ayudará en las tareas de depuración.
Pedro Ramírez pedroramirez22@gmail.com 1
2. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INTRODUCCIÓN AL LENGUAJE C
2.2.3. Errores de regresión
Los errores de regresión son aquellos que se crean accidentalmente cuando se inten-
ta corregir un error lógico. Siempre que se corrige un error se debe comprobar totalmente
la exactitud (corrección) para asegurarse que se fija el error que se está tratando y no
produce otro error. Los errores de regresión son comunes, pero son fáciles de leer y co-
rregir. Una ley no escrita es que: «un error se ha producido, probablemente, por el último
código modificado».
2.2.4. Mensajes de error
Los compiladores emiten mensajes de error o de advertencia durante las fases de
compilación, de enlace o de ejecución de un programa. Los mensajes de error producidos
durante la compilación se suelen producir, normalmente, por errores de sintaxis y suele
variar según los compiladores; pero, en general, se agrupan en tres grandes bloques:
Errores fatales. Son raros. Algunos de ellos indican un error interno del compi-
lador. Cuando ocurre un error fatal, la compilación se detiene inmediatamente, se
debe tomar la acción apropiada y a continuación se vuelve a iniciar la compilación.
Errores de sintaxis. Son los errores típicos de sintaxis, errores de línea de órdenes
y errores de acceso a memoria o disco. El compilador terminará la fase actual de
compilación y se detiene.
Advertencias (warning). No impiden la compilación. Indican condiciones que
son sospechosas, pero son legítimas como parte del lenguaje.
2.2.5. Errores en tiempo de ejecución
Existen dos tipos de errores en tiempo de ejecución: aquellos que son detectados
por el sistema en tiempo de ejecución de C y aquellos que permiten la terminación del
programa pero producen resultados incorrectos.
Un error en tiempo de ejecución puede ocurrir como resultado de que el programa
obliga a la computadora a realizar una operación ilegal, tal como dividir un número por
cero, raíz cuadrada de un número negativo o manipular datos no válidos o no definidos.
Otra fuente de errores en tiempo de ejecución se suele producir por errores en la
entrada de datos producidos por la lectura del dato incorrecto en una variable de entrada.
2.2.6. Pruebas
Los errores de ejecución ocurren después que el programa se ha compilado con éxito
y aún se está ejecutando. Existen ciertos errores que la computadora sólo puede detectar
cuando se ejecuta el programa. La mayoría de los sistemas informáticos detectarán ciertos
errores en tiempo de ejecución y presentarán un mensaje de error apropiado. Muchos
errores en tiempo de ejecución tienen que ver con los cálculos numéricos. Por ejemplo,
Pedro Ramírez pedroramirez22@gmail.com 2
3. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INTRODUCCIÓN AL LENGUAJE C
si la computadora intenta dividir un número por cero se produce un error en tiempo de
ejecución.
Es preciso tener presente que el compilador puede no emitir ningún mensaje de error
durante la ejecución y eso no garantiza que el programa sea correcto. Recuerde que el
compilador sólo le indica si se escribió bien sintácticamente un programa en C. No indica
si el programa hace lo que realmente desea que haga. Los errores lógicos pueden aparecer
-y de hecho aparecerán- por un mal diseño del algoritmo y posterior programa.
2.2.7. Preguntas
1. Qué tipo de error producirá la siguiente instrucción:
a) printf("Bronco es mejor que Mandingo")
b) printf("Bronco es mejor que Mandingo);
c) printf("Bronco es mejor que Mandingo /n");
2. Qué error podría tener la siguiente instrucción:
a) x = a/b;
b) x = sqrt(a);
c) x = a + b;
Pedro Ramírez pedroramirez22@gmail.com 3