es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede obtener la memoria valgrind memcheck al usar clion(mac os) + contenedor Docker basado en Toolchains.

Estoy utilizando una MacBook M1 con Mac OS 15, dado que valgrind aún no es compatible con OS big sur. Por ello, tengo que depurar mis códigos C/C++ en un contenedor de Docker.

Aunque el proceso de compilación es correcto, parece que no puedo obtener ninguna información de salida al ejecutar un valgrind memcheck.

DockerFile para Ubuntu 20:04:
“`

Entorno docker remoto de CLion (cómo construir un contenedor docker, ejecutarlo y detenerlo)

#

Construir y ejecutar:

docker build -t clion/remote-cpp-env:0.5 -f Dockerfile.remote-cpp-env .

docker run -d –cap-add sys_ptrace -p127.0.0.1:2222:22 –name clion_remote_env clion/remote-cpp-env:0.5

ssh-keygen -f “$HOME/.ssh/known_hosts” -R “[localhost]:2222″

#

Detener:

docker stop clion_remote_env

Credenciales SSH (usuario de prueba):

usuario@contraseña

FROM ubuntu:20.04

RUN DEBIAN_FRONTEND=”noninteractive” apt-get update && apt-get -y install tzdata

RUN apt-get update \
&& apt-get install -y ssh \
build-essential \
gcc \
g++ \
gdb \
clang \
make \
ninja-build \
cmake \
autoconf \
automake \
locales-all \
dos2unix \
rsync \
tar \
python \
&& apt-get clean

RUN ( \
echo ‘LogLevel DEBUG2’; \
echo ‘PermitRootLogin yes’; \
echo ‘PasswordAuthentication yes’; \
echo ‘Subsystem sftp /usr/lib/openssh/sftp-server’; \
) > /etc/ssh/sshd_configtest_clion \
&& mkdir /run/sshd

RUN useradd -m user \
&& yes password | passwd user

RUN usermod -s /bin/bash user

CMD [“/usr/sbin/sshd”, “-D”, “-e”, “-f”, “/etc/ssh/sshd_configtest_clion”]

Instalé valgrind manualmente mediante “apt install valgrind”.

Luego configuro una nueva cadena de herramientas de CLion de la siguiente manera:

[ver imagen aquí]

Y configuro valgrind de la siguiente manera:

[ver imagen aquí]

Sin embargo, cuando intento ejecutar un valgrind memcheck, la salida de valgrind en CLion aparece vacía.

¿Alguien que pueda ayudar?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para que Valgrind funcione en MacOS Big Sur

    Dado que Valgrind no es compatible con MacOS Big Sur, una solución posible es utilizar Docker para crear un entorno Ubuntu 20.04, en el que se pueda instalar y utilizar Valgrind.

    Para crear el contenedor de Docker, se puede utilizar el siguiente Dockerfile:

    FROM ubuntu:20.04
    
    RUN DEBIAN_FRONTEND="noninteractive" apt-get update && apt-get -y install tzdata
    
    RUN apt-get update \
      && apt-get install -y ssh \
          build-essential \
          gcc \
          g++ \
          gdb \
          clang \
          make \
          ninja-build \
          cmake \
          autoconf \
          automake \
          locales-all \
          dos2unix \
          rsync \
          tar \
          python \
      && apt-get install -y valgrind \
      && apt-get clean
    
    RUN ( \
        echo 'LogLevel DEBUG2'; \
        echo 'PermitRootLogin yes'; \
        echo 'PasswordAuthentication yes'; \
        echo 'Subsystem sftp /usr/lib/openssh/sftp-server'; \
      ) > /etc/ssh/sshd_config_test_clion \
      && mkdir /run/sshd
    
    RUN useradd -m user \
      && yes password | passwd user
    
    RUN usermod -s /bin/bash user
    
    CMD ["/usr/sbin/sshd", "-D", "-e", "-f", "/etc/ssh/sshd_config_test_clion"]
    

    Luego se puede construir y ejecutar el contenedor con los siguientes comandos:

    docker build -t ubuntu-valgrind .
    docker run --cap-add=sys_ptrace --security-opt="seccomp=unconfined" -it ubuntu-valgrind /bin/bash
    

    Una vez dentro del contenedor, se puede ejecutar el código C/C++ con Valgrind como de costumbre.

    Si se utiliza CLion, se puede configurar un nuevo kit de herramientas basado en el contenedor de Docker siguiendo estos pasos:

    1. Abrir Preferencias > Compilación, Ejecución, Implementación > Kits de Herramientas
    2. Hacer clic en el icono “+” y seleccionar “Docker”
    3. Rellenar los detalles relevantes, como el servidor Docker, el nombre de la imagen y el comando
    4. Hacer clic en “OK” para guardar el nuevo kit de herramientas

    Luego se puede seleccionar el nuevo kit de herramientas y utilizar Valgrind como de costumbre dentro de CLion. Sin embargo, si aún no se pueden obtener información de salida al ejecutar un memcheck de Valgrind, se puede verificar si Valgrind se está ejecutando dentro del contenedor de Docker ejecutando ps -ef y comprobando si Valgrind está en la lista.

    Otra posible solución es utilizar una herramienta de terceros como dlv (Delve) o GDB para depurar el código, ya que estas herramientas son compatibles con MacOS Big Sur.

Comments are closed.