Sunteți pe pagina 1din 4

Índice

§ Compilando con gcc

Herramientas de desarrollo § El gestor de proyectos make

gcc, gdb y make § Depurando con gdb

Pedro Merino Gómez


Jesús Martínez Cruz
Dpto. Lenguajes y Ciencias de la Computación
Universidad de Málaga
Herramientas de desarrollo 2

Compilando: gcc El primer ejecutable

§ gcc (GNU C compiler) es el compilador en 1. Para compilar:


línea de comandos más extendido en el mundo gcc –c main.c ( Salida: main.o )
UNIX.
2. Para crear el ejecutable:
gcc main.o –o programa
§ Sirve además como envoltorio de herramientas
anexas al proceso de implementación de Nombre del ejecutable.
código: preprocesador (cpp), ensamblador (as), 3. Para ejecutarlo: Por defecto: a.out
enlazador (ld)... ./programa
Los pasos 1 y 2 se pueden integrar en uno:
gcc main.c –o programa
Herramientas de desarrollo 3 Herramientas de desarrollo 4

Algunos flags útiles en compilación Algunos flags útiles (y II)

§ El compilador avisa de errores y warnings de § Los flags de optimización permiten un código


código no conforme al C estándar. más compacto y/o más veloz.
– Sin embargo, la información por defecto podría – La optimización suele ser conservativa (hasta
ocultar algunas posibles fuentes de error en tiempo cierto punto), manteniendo el comportamiento
de ejecución, o que podrían darse al portar código original del programa previo a este paso.
entre plataformas. § Usamos el flag –O seguido de un número que
§ Usamos el flag –W para especificar los tipos indica el nivel de optimización (consultar
de warnings que nos interesan (o todos ellos). manual del compilador!!).
gcc –Wall main.c –o programa gcc –O2 main.c –o programa

Herramientas de desarrollo 5 Herramientas de desarrollo 6

1
Añadiendo archivos .h Añadiendo librerías

§ Las librerías se construyen con esta


§ Hay archivos de cabecera que no están donde nomenclatura:
el compilador espera (/usr/include/ ó ./). lib + nombrelibrería + (.a | .so)
Por ejemplo: libcrypt.a
§ Para incluirlos al compilar, se utilizan los flags
–Iruta y –i archivo.h § Y para enlazarlas con nuestra aplicación, se
utilizan los flags –Lruta y –lnombrelibrería

Herramientas de desarrollo 7 Herramientas de desarrollo 8

Compilando muchas fuentes ¿Y en C++?

§ Hay que estructurar el código lo máximo § El compilador GNU se denomina g++


posible, usando distintos ficheros de fuentes.
§ Se utiliza de la misma forma que gcc:
§ Para compilarlos y enlazarlos, usamos:
g++ main.cc –o programa
gcc main.c rutinas.c protocolos.c –o programa

En cualquier orden

Herramientas de desarrollo 9 Herramientas de desarrollo 10

Gestión de proyectos: make Primeros pasos con make

§ Cuando nuestro proyecto incluye varios § La ejecución del programa es simple:


ficheros fuente, se repiten ciertas tareas make [regla]
tediosas por cada cambio realizado.
Hay que recompilar y enlazar todos los fuentes § Busca en el directorio actual el archivo de
de nuevo, de forma ordenada en función de las reglas, llamado makefile o Makefile.
dependencias de cada uno !!
§ El archivo de reglas contiene las instrucciones
para compilar el proyecto.

Herramientas de desarrollo 11 Herramientas de desarrollo 12

2
La estructura del makefile (I) La estructura del makefile (y II)

1. Definiciones de variables: § Ejemplos de reglas:


CC= gcc
CFLAGS= -g –Wall –D_POSIX_ all: main
2. Reglas: main: main.o
Otras reglas
regla: dependencias
o gcc –g main.o –o main
acción Cambios en ficheros
main.o: main.c main.h
$(CC) $(CFLAGS) –o programa
gcc –g –c main.c

Herramientas de desarrollo 13 Herramientas de desarrollo 14

Automatizando aún más (I) Automatizando aún más (II)

§ Algunos consejos para la creación de variables § Consejos de creacion de reglas:


all: $(EXE)

CC= gcc
$(EXE): $(OBJS)
CFLAGS= -g -Wall $(LD) $(LDFLAGS) $(OBJS) –o $(EXE)
LD= gcc
LDFLAGS= -lcrypt main.o: main.c protocolos.h rutinas.h
OBJS= main.o rutinas.o protocolos.o $(CC) $(CFLAGS) –c main.c
EXE= programa
#... sigue una regla por cada fichero .c

Herramientas de desarrollo 15 Herramientas de desarrollo 16

Automatizando aún más (III) Automatizando aún más (y IV)

§ Usando reglas implícitas § Un problema de las reglas implícitas es que se pierde


la flexibilidad para expresar dependencias
particulares de cada fichero (por ejemplo los .h).
%.o: %.c § Usamos la regla depend:
$(CC) $(CFLAGS) –c $< (y llamamos a make depend antes de a make all)

SRCS= fichero1.c fichero2.c fichero3.c


%: significa “cualquiera”. Mantiene su valor constante
depend:
mientras se ejecuta la regla.
rm –f .depend
$<: cadena que incluye el valor de la dependencia (%.c), makedepend –f- -- $(CFLAGS) -- $(SRCS) > .depend
o dependencias que cumplen con la regla.
Este archivo contiene las dependencias
include .depend actualizadas de cada fichero fuente (no
incluye comandos).
Herramientas de desarrollo 17 Herramientas de desarrollo 18

3
El depurador: gdb Dentro del depurador (I)

§ Es una herramienta imprescindible para § Para ejecutar el programa:


reparar errores que han sucedido en tiempo de run argumento1 argumento2 ...
ejecución. § Para establecer puntos de ruptura
§ El ejecutable de pruebas (sensible a la break fichero.c:5 (línea)
depuración) ha de ser diferente al generado break nombrefuncion (función)
para producción final. § Ejecución paso a paso
gcc –g main.c –o programa next (un paso de ejecución completo).
gdb programa step (si existe una llamada a función,
entra en ella y para)
Herramientas de desarrollo 19 Herramientas de desarrollo 20

Dentro del depurador (II) Dentro del depurador (y III)

§ Variables y expresiones (del contexto actual) § Los procesos que usan mecanismos de
print var_name comunicación/sincronización son especialmente
difíciles de depurar.
print i*2
print miarray[8]
§ Para enlazar con un proceso que todavía se esta
ejecutándose:
§ ¿Dónde estoy? ¿Por dónde voy? gdb programa PID
where (Genera la pila de funciones hasta llegar a
main) § Para conmutar entre threads:
thread NUMERO
Herramientas de desarrollo 21 Herramientas de desarrollo 22

Depurando cores

§ En algunos casos, y ante comportamientos


anómalos, el kernel aborta la ejecución del
programa, generando un fichero core.
– El core no es más que un volcado de memoria a
disco para ese programa.
§ Si se utilizó el flag de depuración –g, se puede
utilizar gdb para inspeccionar las variables, el
estado en que quedó, el contenido de la
memoria...
gdb /ruta/al/programa /ruta/al/core
Herramientas de desarrollo 23

S-ar putea să vă placă și