Los requisitos necesarios para correr el proyecto son los siguientes:
docker
: para emular la compilación en una distribución de Ubuntu/Debianqemu
: permite tomar la imagen compilada y emular un sistema
Desde Arch Linux el procedimiento de instalación es sencillo:
sudo pacman -S qemu-system-x86 docker
Una vez instalados los requisitos se deben realizar unas tareas antes de poder compilar el proyecto.
Esto permite correr los contenedores, sin necesidad de tener privilegios de administrador.
sudo groupadd docker
sudo usermod -aG docker $USER
Con permisos de administrador correr el siguiente comando:
sudo setsid -f dockerd >/dev/null 2>&1
Con docker andando ya se pueden correr todos los comandos relacionados con docker. El comando ./compile.sh
permitirá realizar el resto del trabajo.
Listo! El entorno ya está preparado para compilar el proyecto y correrlo.
El comando ./compile.sh
realizará las siguientes tareas:
- Descargará la imágen de
agodio/itba-so:1.0
de docker donde se compilará el proyecto. - Creará un nuevo contenedor preparado para compilar el proyecto como si fuéramos nosotros porque crea un usuario con nuestro mismo uid y gid.
- Iniciará el contenedor para que siempre esté corriendo.
- Enviará los comandos necesarios para limpiar y compilar el proyecto completo.
Esa es la funcionalidad base del comando ./compile.sh
. A su vez, cuenta con dos flags que pueden ser enviados:
-d
: Compila el proyecto con información de debugging para poder utilizar gdb y ejecutar paso a paso el código.-r
: Una vez compilado el proyecto completo, si no ocurrió ningún error durante el proceso, se ejecuta el comando./run.sh
, es decir, una vez compilado el proyecto, lo ejecuta.
Nota: Si se corre el comando con ambos flags en simultáneo, es decir,
./compile.sh -d -r
, el proyecto se compilará y ejecutará en modo debugging. Si solo se utiliza el flag-r
, se compilará en modo normal y se ejecutará en modo normal, sin información de debugging.
Para poder ejecutar el código paso a paso debe utilizarse el programa gdb
.
Para esto hay un archivo de configuración .gdbinit
que debe copiarse el home del usuario para poder configurarlo apropiadamente.
cp .gdbinit $HOME
Una vez realizado esto, para poder funcionarlo se utilizarán dos terminales:
- En una se ejecutará el programa de compilado y ejecución:
./compile.sh -d -r
- En la otra se ejecutará el
gdb
que se conectará alqemu
y podrá debuguearse el código.
El gdb
estará configurado con dos subcomandos para facilitar el debugueo de código en ASM y en C:
src-prof
configura elgdb
en modo de debugueo para código C.asm-prof
lo mismo pero para código en ASM.
Nota: Se puede intercalar en los modos en cualquier momento.
Una vez que está corriendo el qemu
este se quedará esperando a que se conecte el gdb
.
Para eso correr el comando gdb
. Una vez abierto si se corre c
o continue
correrá el programa de forma normal.
Si se quiere hacer un debugueo step by step puede ponerse un breakpoint con b
o br
en alguna parte del código y ejecutar c
para que salte hasta ese punto.
> b main
> c
Si quiere realizarse un debugueo también step by step desde el principio, una vez abierto el gdb
comenzar a ejecutar s
o si
(no significan lo mismo OJO).