Compilación y depuración de programas
¿Cuál es
la diferencia entre compilar y depurar en un código de programa?
1. Compilar es convertir el código a un código entendible (código
de maquina) por la Maquina
2. Depurar consiste en ejecutar el código desde 0 o desde una
determinada instrucción para encontrar y corregir errores
Compilar y depurar
Compilar y
depurar son actividades clave en el desarrollo de aplicaciones, componentes y
servicios sólidos. Mediante las herramientas de Visual Studio puede controlar
las compilaciones, identificar y resolver los errores de forma eficaz, así como
probar las compilaciones de diversas maneras. Los siguientes documentos
describen cómo usar las herramientas.
Depuración de programas
Depuración de programas es el proceso de
identificar y corregir errores de programación. En inglés se le conoce como
debugging, es que se asemeja a la eliminación de bichos (bugs), manera en que
se conoce informalmente a los errores de programación. Se dice que el término
bug proviene de la época de los ordenadores de válvula termoiónica, en los
cuales los problemas se generaban por los insectos que eran atraídos por las
luces y estropeaban el equipo. Si bien existen técnicas para la revisión
sistemática del código fuente y se cuenta con medios computacionales para la
detección de errores (depuradores) y facilidades integradas en los sistemas
lower CASE y en los ambientes de desarrollo integrado, sigue siendo en buena
medida una actividad manual, que desafía la paciencia, la imaginación y la
intuición del programador. Muchas veces se requiere incluir en el código fuente
instrucciones auxiliares que permitan el seguimiento de la ejecución del
programa, presentando los valores de variables y direcciones de memoria y
ralentizando la salida de datos (modo de depuración). Dentro de un proceso
formal de aseguramiento de la calidad, puede ser asimilado al concepto de
prueba unitaria.
Origen
Existe una controversia acerca del origen del
término depuración o "debugging" en inglés. Los términos
"bug" y "debugging" son atribuidos popularmente a la
almirante Grace Murray Hopper por los años 1940. Mientras trabajaba con un Mark
II en la Universidad de Harvard, ella encontró una polilla atrapada en un relé
impidiendo las operaciones de dicha computadora, por lo cual ella comentó que
cuando se sacó aquella polilla le habían hecho "debugging" al sistema.
Sin embargo el término "bug" cómo significado de error técnico data
cerca de 1878, y el término "debugging" o depuración ha sido usado en
aeronáutica antes de entrar al mundo de las computadoras.
Aplicación
Como el software y los sistemas electrónicos se
vuelven generalmente más complejos, se han desarrollado varias técnicas comunes
de depuración para detectar anomalías, corregir funcionalidades y optimizar
código fuente. Existen algunos aficionados que consideran la depuración como
una forma de arte.
Compilador
Un compilador es un programa informático que
traduce un programa escrito en un lenguaje de programación a otro lenguaje de
programación.1 Usualmente el segundo lenguaje es lenguaje de máquina, pero
también puede ser un código intermedio (bytecode), o simplemente texto. Este
proceso de traducción se conoce como compilación.
La construcción de un compilador involucra la
división del proceso en una serie de fases que variará con su complejidad.
Generalmente estas fases se agrupan en dos tareas: el análisis del programa
fuente y la síntesis del programa objeto.
Análisis: Se trata de la comprobación de la
corrección del programa fuente, e incluye las fases correspondientes al
Análisis léxico (que consiste en la descomposición del programa fuente en
componentes léxicos), análisis sintáctico (agrupación de los componentes
léxicos en frases gramaticales) y análisis semántico (comprobación de la
validez semántica de las sentencias aceptadas en la fase de análisis
sintáctico).
Síntesis: Su objetivo es la generación de la
salida expresada en el lenguaje objeto y suele estar formado por una o varias
combinaciones de fases de generación de código (normalmente se trata de código
intermedio o de código objeto) y de optimización de código (en las que se busca
obtener un código lo más eficiente posible).
Tipos
de compiladores
Esta taxonomía de los tipos de compiladores no
es excluyente, por lo que puede haber compiladores que se adscriban a varias
categorías:
Compiladores cruzados: generan código para un
sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en
el código para mejorar su eficiencia, pero manteniendo la funcionalidad del
programa original.
Compiladores de una sola pasada: generan el
código máquina a partir de una única lectura del código fuente.
Compiladores de varias pasadas: necesitan leer
el código fuente varias veces antes de poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de
un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las
primeras épocas de la informática, el software de los compiladores era
considerado como uno de los más complejos existentes. Los primeros compiladores se
realizaron programándolos directamente en lenguaje máquina o en ensamblador.
Una vez que se dispone de un compilador, se pueden escribir nuevas versiones
del compilador (u otros compiladores distintos) en el lenguaje que compila ese
compilador.
Actualmente existen herramientas que facilitan la tarea de escribir
compiladores ó intérpretes informáticos. Estas herramientas permiten generar el
esqueleto del analizador sintáctico a partir de una definición formal del
lenguaje de partida, especificada normalmente mediante una gramática formal y
barata, dejando únicamente al programador del compilador la tarea de programar
las acciones semánticas asociadas.



