COMPILADORES Y DEBUGADORES. C, Java y OCaml.

El primer paso a la hora de programar es conocer ciertos programas y aspectos que te ayudarán a la hora de hacer tu aplicación.

Ya os hablé de los editores de texto en una entrada anterior en este blog (link (click aqui)) y os comentaba la utilidad de tener un buen editor para escribir nuestros programas.

Hoy os voy hablar del compilador y el debugador, como instalar y usar el de C, Java y OCaml (lenguajes que voy enseñar en este blog) y su funcionalidad.

¿Qué es un compilador?

Un compilador es un programa que convierte el código de un lenguaje de programación en lenguaje máquina. El lenguaje máquina es aquel grupo de 0 y 1 que es lo que verdaderamente entiende un ordenador para operar. Usemos entonces la analogía que un compilador es un "traductor" programador-máquina el cual recoje las instrucciones de un programador y las transforma en el lenguaje entendible por las máquinas (binario).

Resultado de imagen de binary code 

El compilador es el encargado de revisar que tu código esté bien escrito y sea coherente, optimizarlo ligeramente para que se ejecute mas rápido y, finalmente, hacer la traduccion. Al compilar, crea el ejecutable que  creará el proceso.

Saber mas: Compilador
Saber mas: Lenguaje máquina

¿Que es un debugador?

Un debugador (mas comunmente debugger) es un programa que nos permite agilizar la busqueda de errores en un código. Cuando una ejecucion falla le podemos pasar este debugger, cuya funcionalidad es encontrar el momento de fallo y darnos ciertas informaciones, tales como valor de variables en un momento determinado, linea de error, motivo de error...

Para poder distinguir los debugadores vamos hacer una pequeña division bastante global de ellos:

  • Debugger ejecución -> mide los errores de ejecución de un código (gdb)
  • Debugger memoria -> mide las perdidas y errores de memoria del codigo (valgrind)
Aunque no son necesarios 100% para crear un programa, son muy utiles.

Compiladores para C, Java y Ocaml

  • C -> gcc (suele venir de fabrica en cualquier sistema operativo)
Por si no lo tienes instalado y te interesa -> guia
pero deberias tenerlo de montaje. Para probar abre un terminal o el simbolo del sistema (Win) y pon gcc. El resultado debe mostrar:

gcc permite compilar un codigo.c y crear un ejecutable.out
Para ello he creado un holaMundo.c que imprime por pantalla "Hola mundo!"
Lo compilo con gcc y ejecuto el programa  de la siguiente manera:

ls -> muestra los archivos que tengo en el directorio actual

En principio solo tenia holaMundo.c que contiene instrucciones en lenguaje C para imprimir por pantalla "Hola mundo!".
Posteriormente se compila, -o para darle un nombre al ejecutable, el que sea (si no se especifica será a.out). Yo le llamo holamundo.out.
Al hacer otro ls veis que ya hay un nuevo archivo. Lo ejecuto poniendo su nombre (./ sirve para decirle que está en el directorio actual).
Imprime la cadena "Hola mundo!" y finalmente muestro los datos del .out y .c.

  • JAVA: javac (viene con Java por defecto)
En caso de no tenerlo instalado -> instalar Java -> Java
Para probarlo escribe en el terminal/simbolo del sistema: 

javac -version

Si devuelve version es que tienes java instalado con esa version.

En caso de Java, la compilación es equivalente que en C pero yo compilaré Java por el IDE NetBeans el cual explique instalacion en editores de texto (link arriba).

  • OCaml: ocaml y ocamlc (NO por defecto)
Se instala dando aqui click y buscando tu sistema operativo. Los comandos vienen totalmente explicados para Unix, algo mas dificil en Windows.
Se instalará y tendras 2 compiladores:

- Compilador: ocamlc
- Compilador dinamico: ocaml

Se diferencian en que en ocaml puedes ir probando funciones por separado mientras que ocamlc compila un archivo completamente (como gcc)

Probar ocamlc es sencillo. Pon en tu terminal/simbolo:

ocamlc

Si no hace nada está correctamente instalado, si da error no.
Ocaml se prueba haciendo algo asi:

Debuggers

Tanto gcc como ocamlc como javac tienen la posibilidad de ejecutarse con un -g tras la orden (gcc -g -o holamundo.out holamundo.c)
Con esto podemos pasar el gdb. Si el codigo falla en ejecucion compilamos de esta forma.
Luego ponemos gdb ./holamundo.out y damos Enter. Luego nos pedirá que metamos otra instruccion. En este caso haremos run. Una vez con el error detectado podemos poner where que nos indica la linea o break para saber datos de variables y funciones.

Para instalarlo en Linux (version disponible) pon en la terminal:

sudo apt-get install libc6-dbg gdb valgrind

Para controlar problemas de fugas  y errores  de memoria existe Valgrind, una parte del gdb.
Para ejecutarlo pon el el terminal:

valgrind --leak-check=full ./holamundo.out

Ejemplo de los debugger sobre el hola mundo:

 

Comentarios