AddressSanitizer运行时触发CHECK断言错误,初始化失败求助
AddressSanitizer运行时触发CHECK断言错误,初始化失败求助
看起来你遇到的是LLVM-MinGW环境下AddressSanitizer初始化时的底层拦截问题,这个错误通常是因为ASan的动态链接库加载异常,或者链接器参数破坏了ASan依赖的CRT初始化流程。我来帮你梳理几个可行的解决方向:
- 移除自定义入口点参数,恢复CRT默认初始化
你在链接参数里手动指定了--entry=mainCRTStartup,这会跳过CRT的完整初始化流程——而ASan恰恰需要依赖CRT的早期初始化,来完成memcpy这类内存函数的挂钩工作。把这两行参数从任务配置里删掉:
// 从args数组中移除以下两行 "-Xlinker", "--entry=mainCRTStartup",
手动指定入口点会打乱ASan的初始化顺序,导致它还没拿到memcpy的真实函数指针就尝试调用,直接触发CHECK断言。
确保ASan库与LLVM版本严格匹配
你提到LLVM版本是20.1.8,但ASan库版本是20.1.0,版本不兼容很容易引发初始化故障。请直接从C:\llvm-mingw\lib\clang\20.1.8\lib\windows目录下,复制对应架构的libclang_rt.asan_dynamic-x86_64.dll到你的可执行文件目录,替换掉旧版本的库文件。简化编译参数,逐步排查干扰项
先使用最基础的ASan编译命令测试,排除其他参数的影响:
C:\llvm-mingw\bin\clang++.exe -g -fsanitize=address test.cpp -o test.exe
如果这个基础命令能正常输出ASan test OK,再逐步添加你需要的参数(比如-fcolor-diagnostics、--subsystem=console),找到哪个参数和ASan的初始化冲突。
- 重启VS Code让环境变量生效
你已经把C:\llvm-mingw\bin加入环境变量,但修改后需要完全重启VS Code,让它的终端进程读取新的环境变量。否则VS Code的任务可能还是用的旧环境,导致ASan无法正确加载依赖库。
另外,你可以尝试直接在系统CMD或PowerShell里编译运行,而不是通过VS Code的任务——如果终端里能正常运行,那问题大概率出在VS Code任务的环境配置上。
内容来源于stack exchange
相关产品推荐
相关产品推荐

