【问题标题】:How to set ASAN_OPTIONS to CMake managed projects in CLion如何在 CLion 中将 ASAN_OPTIONS 设置为 CMake 托管项目
【发布时间】:2022-01-02 11:25:58
【问题描述】:

我正在使用 CLion 在我的 CMake 项目中尝试使用 Google sanitizers https://www.jetbrains.com/help/clion/google-sanitizers.html。我需要传递 ASAN_OPTIONS=detect_container_overflow=0 环境变量,以便 Google sanitizers 可以传递容器溢出错误。我在运行/调试配置中添加了“ASAN_OPTIONS=detect_container_overflow=0”,但它不起作用,清理程序仍然在 container_overflow 错误时停止并且不会继续。

所以我添加了一个新的环境变量 TESTENV=testenv 在我的程序中加入以下几行来检查它是否有效:

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

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

输出确实包含 TESTENV,但 ASAN_OPTIONS 的输出没有 detect_container_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

我也试过 ASAN_OPTIONS=$ASAN_OPTIONS:detect_container_overflow=0 但输出是一样的。有人可以帮忙吗?

【问题讨论】:

    标签: c++ environment-variables clion address-sanitizer sanitizer


    【解决方案1】:

    我正在尝试找出正确的方法。我想它应该可以通过在 Sanitizers 部分中设置正确的选项来工作(Build, Execution & Deployment > Dynamic Analysis Tools > Sanitizers

    但由于某种原因,这对我不起作用,所以我也必须在 CMake 环境部分中设置它(构建、执行和部署 > CMake

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 2021-09-15
      • 2018-06-05
      • 2016-09-17
      • 2022-12-29
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      相关资源
      最近更新 更多