VS2022社区版AddressSanitizer符号化失败及检查错误求助
问题
我正在构建一个C++项目并尝试运行AddressSanitizer。由于项目规模较大,无法确定sanitizer具体在何处失败,但问题在于sanitizer无法显示错误代码行,反而出现如下错误:
==17532==AddressSanitizer CHECK failed: D:\a\_work\1\s\src\vctools\crt\asan\llvm\compiler-rt\lib\asan\asan_thread.cpp:361 "((ptr[0] == kCurrentStackFrameMagic)) != (0)" (0x0, 0x0) ==17532==WARNING: Failed to use and restart external symbolizer! #0 0x7ffc7df4a62d in _asan_wrap_GlobalSize+0x57567 (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x18005a62d) #1 0x7ffc7df0a28f in _asan_wrap_GlobalSize+0x171c9 (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x18001a28f) #2 0x7ffc7df4f809 in _asan_wrap_GlobalSize+0x5c743 (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x18005f809) #3 0x7ffc7df26161 in _asan_wrap_GlobalSize+0x3309b (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x180036161) #4 0x7ffc7df250e2 in _asan_wrap_GlobalSize+0x3201c (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x1800350e2) #5 0x7ffc7df27375 in _asan_wrap_GlobalSize+0x342af (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x180037375) #6 0x7ffc7df4878d in _asan_wrap_GlobalSize+0x556c7 (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x18005878d) #7 0x7ffc7df33edb in _asan_wrap_GlobalSize+0x40e15 (C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\clang_rt.asan_dbg_dynamic-x86_64.dll+0x180043edb)
提示检查失败且无法使用并重启外部symbolizer,推测无法对错误位置进行符号化以显示具体问题函数。网络连接正常,未收到连接符号服务器的提示,询问是否需要手动下载符号。
解决建议
- 检查符号路径配置:打开Visual Studio的
工具 > 选项 > 调试 > 符号,确保勾选Microsoft符号服务器,设置本地符号缓存目录,手动点击加载所有符号触发下载。 - 手动指定symbolizer路径:ASAN依赖
llvm-symbolizer.exe,找到VS安装目录下的该工具(通常在C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\<版本号>\bin\HostX64\x64),通过环境变量指定路径:set ASAN_SYMBOLIZER_PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\llvm-symbolizer.exe - 确保编译生成完整符号:项目编译时启用调试信息(
/Zi或/ZI选项),不要剥离符号,ASAN需要完整调试符号才能解析代码行。 - 手动下载符号:若自动加载失败,可手动下载对应版本
clang_rt.asan_dbg_dynamic-x86_64.dll的.pdb符号文件,放在dll同目录或添加到符号路径后重新运行ASAN。 - 排查ASAN内部异常:
asan_thread.cpp:361的CHECK失败属于ASAN内部错误,可能和项目线程操作、栈溢出或内存篡改有关。可简化代码逐步排查,同时确保VS和ASAN工具链为最新版本,规避已知BUG。
内容的提问来源于stack exchange,提问作者ulak blade
相关产品推荐
相关产品推荐

