You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLion中结合CMake使用AddressSanitizer(ASAN)失效问题求助

解决CLion中CMake配置AddressSanitizer无效的问题

问题根源

你的代码包含三处可被ASAN检测的内存问题:strcpy缓冲区溢出、栈数组越界访问、堆内存泄漏,但CLion通过CMake构建后运行未触发ASAN告警,仅输出部分内容后退出。终端直接用g++ -fsanitize=address编译可正常检测,说明问题出在CMake配置或CLion运行设置上。

修复步骤

1. 改用目标级CMake配置(避免全局变量被覆盖)

直接修改CMAKE_CXX_FLAGS容易被CLion的默认Debug配置覆盖,推荐针对目标单独设置ASAN选项:

更新后的CMakeLists.txt:

cmake_minimum_required(VERSION 3.19)
project(asan)

set(CMAKE_CXX_STANDARD 17)

add_executable(asan main.cpp)
# 为目标添加ASAN编译和链接参数,-g保留调试信息
target_compile_options(asan PRIVATE -fsanitize=address -g)
target_link_options(asan PRIVATE -fsanitize=address)

2. 确认CLion使用Debug构建配置

ASAN在Release模式下会因编译器优化丢失部分检测能力:

  • 点击工具栏配置下拉框 → 选择"Edit Configurations..."
  • 确保当前配置的"Build configuration"设置为Debug

3. 重新加载CMake项目

修改配置后,点击CLion工具栏的「Reload CMake Project」按钮(或快捷键Ctrl+Shift+F9),强制CMake生成新的构建文件。

4. 修复代码中的潜在提前崩溃点

你的运行输出仅显示Test Project就退出,可能是printf语句的语法错误导致:

  • 将代码中的`printf("Test Project

");修正为printf("Test Project\n\n");`,避免因未转义的换行符引发运行时崩溃,确保ASAN有机会输出检测结果。

验证效果

重新构建并运行程序,ASAN会输出详细的内存问题报告,包含每个问题的具体代码行号和内存地址信息。

内容的提问来源于stack exchange,提问作者saadurr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:30:13