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.

Cómo configurar ASAN_OPTIONS en proyectos gestionados por CMake en CLion

Estoy intentando usar los sanitizadores de Google https://www.jetbrains.com/help/clion/google-sanitizers.html en mi proyecto CMake utilizando CLion. Necesito pasar la variable de entorno ASANOPTIONS=detectcontaineroverflow=0 para que los sanitizadores de Google puedan detectar el error de desbordamiento de contenedor. Puse “ASANOPTIONS=detectcontaineroverflow=0″ en la configuración de Ejecución/Depuración, pero no funcionó, el sanitizador sigue deteniéndose en los errores de desbordamiento de contenedor y no continúa.

Entonces añadí una nueva variable de entorno
TESTENV=testenv y puse las siguientes líneas en mi programa para comprobar si funciona:

  const char* asan = std::getenv("ASAN<em>OPTIONS");
  LOG(INFO) << fmt::format("ASAN</em>OPTIONS {}", asan);

const char* testEnv = std::getenv("TESTENV");
  LOG(INFO) << fmt::format("TESTENV {}", testEnv);

La salida incluye TESTENV, pero la salida de ASANOPTIONS no tiene detectcontainer_overflow=0:

I20220102 00:34:57.356257 966499840 test.cpp:148] ASAN_OPTIONS detect_stack_use_after_return=false log_path='/private/var/folders/rk/5dyjln0d4551nr1c6q7vz8mc0000gn/T/clion-sanitizersf4b4f3de-dbaf-4dc8-a2fb-fc5f7f2e6138/00f8647a-83ba-4e45-8f4e-2e0c0a45ef9f' stack_trace_format='pc_%p###func_%f###file_%s###line_%l###obj_%M' print_summary='true'
I20220102 00:34:57.356273 966499840 test.cpp:151] TESTENV testenv

También intenté ASANOPTIONS=$ASANOPTIONS:detectcontaineroverflow=0 pero la salida es la misma. ¿Alguien puede ayudar?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el intento de pasar la variable de entorno ASAN_OPTIONS a través de la configuración de ejecución/depuración en CLion no ha funcionado. Para comprobar si la variable se está configurando correctamente, el programador creó una nueva variable de entorno TESTENV e imprimió ambas variables en el programa. Sin embargo, la salida solo muestra TESTENV y no la configuración deseada de detect_container_overflow=0 para ASAN_OPTIONS.

    Una posible solución a este problema es establecer la variable de entorno ASAN_OPTIONS directamente en la terminal antes de ejecutar el programa. Por ejemplo, se puede utilizar el comando export ASAN_OPTIONS=detect_container_overflow=0 para establecer la variable en la sesión actual de la terminal. Alternativamente, el comando set también se puede utilizar en Windows.

    Si este enfoque no es factible, otra opción es modificar la configuración de CMake directamente o crear un archivo de configuración separado donde se pueda establecer correctamente la variable de entorno. Esto se puede hacer agregando la siguiente línea al archivo CMakeLists.txt:

    add_definitions(-DASAN_OPTIONS="detect_container_overflow=0")
    

    Esto definirá una macro de preprocesador ASAN_OPTIONS a la que el programa puede acceder para leer el valor detect_container_overflow=0.

    En general, el problema puede haber sido causado por limitaciones en el manejo de variables de entorno de CLion o en la sintaxis utilizada para establecer la variable en la configuración de ejecución/depuración. Sin embargo, utilizando las técnicas mencionadas anteriormente, el programador debería poder establecer correctamente la variable ASAN_OPTIONS y evitar errores de desbordamiento de contenedor.

Comments are closed.