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?
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 entornoTESTENV
e imprimió ambas variables en el programa. Sin embargo, la salida solo muestraTESTENV
y no la configuración deseada dedetect_container_overflow=0
paraASAN_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 comandoexport ASAN_OPTIONS=detect_container_overflow=0
para establecer la variable en la sesión actual de la terminal. Alternativamente, el comandoset
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:
Esto definirá una macro de preprocesador
ASAN_OPTIONS
a la que el programa puede acceder para leer el valordetect_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.