- Instala Docker y docker-compose. En macOS basta con instalar docker desktop.
- Verifica que tienes docker instalado con
docker -v
- Clona este repositorio:
git clone https://github.com/rieg-ec/valgrind-docker && cd valgrind-docker
. corredocker compose up -d
dentro del directorio clonado. (Ojo. Es nescesario ejecutardocker compose up -d
cada vez que quieras utilizar esto, aunque solo se demorara la primera vez)
- En la consola ejecuta
docker compose run mycontainer /bin/bash
, con eso ingresaras al contenedor. En tu terminal deberia salir algo similar aroot@0<id del contenedor>:/#
. - Corre
cd ~/volume
para ir a la carpeta con tu codigo. - desde aca puedes utilizar la consola como quieras, para compilar, ejecutar o utilizar valgrind.
Por ejemplo si tienes la carpeta
│volume
└───code
│ └───src
│ │
│ └───tests
│ │
│ └Makefile
los comandos son ejecutados Dentro del container (con el comando mencionado anteriormente)
cd ~/volume # ir a carpeta volume (Importante)
cd code/ # entrar a la carpeta que deseamos
make
./program # ejecutar ejecutar el ejecutable
valgrind ./program #ejecutar valgrind
-
El contenedor de docker y tu computador comparten la carpeta
/volumes
, por lo tanto puedes modificar cualquier archivo desde afuera del contenedor y los cambios se veran reflejados adentro también. -
Lo unico importante es siempre compilar tu codigo desde adentro del contenedor. Preocupate de seguir el 2do paso en la seccion
Cómo usar
para entrar al contenedor. Si compilas tu codigo desde afuera, puede ser que el binario resultante sea distinto y te arroje errores al ejecutarlo dentro del contenedor. -
El compilador y valgrind vienen instalados, no debes instalarlos tu. Puedes probar que valgrind esté funcionando:
valgrind ./program
. Si crees que algo más debiera estar instalado por defecto avisame :) -
Si deseas cambiarle el nombre al container, basta con cambiarlo en el archivo
docker-compose.yml
-
La primera vez que ejecutes
docker-compose up -d
tomara algun tiempo ya que ha de descargar todos los archivos nescesarios.