我正在尝试将地址清理程序与 MSVC 一起使用。
Visual Studio 安装程序显示我有“Visual Studio Community 2019”版本 16.9.0。
我有最基本的C++程序:
int main() {
return 0;
}
CMakeLists.txt 也非常基本:
cmake_minimum_required(VERSION 3.14)
project(untitled VERSION 1.0.0)
add_executable(${PROJECT_NAME} main.cpp)
add_definitions(/fsanitize=address /Zi)
程序在调试和发布模式下都能正确编译和链接。在发布模式下,我收到以下警告,这似乎完全合法:
LINK:警告 LNK4302:请将“/DEBUG”添加到链接命令行以获得更好的 ASAN 错误报告
到目前为止,一切都很好 (?)。
但是,当我运行该应用程序时,返回代码为-1073741515 (0xC0000135)。谷歌告诉我这可能表明缺少一个库。
如果我删除add_definitions(/fsanitize=address /Zi)
从构建中,返回值为 0。缺少的库很可能是地址清理程序本身。
如何正确配置我的系统来解决此问题?谢谢!
ASAN 是一种调试功能。为此clang_rt.asan_*.dll
DLL 不作为 VC++ 可再发行软件包的一部分安装在 System32 中。
正如所解释的here https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/#compiling-with-asan-from-the-console,在共享 CRT 模式下使用 ASAN 时(/MDd
),你需要确保clang_rt.asan_dbg_dynamic-x86_64.dll
and clang_rt.asan_dynamic-x86_64.dll
都在 PATH 上。
您可以添加C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64
到 PATH 或将 DLL 复制到项目的输出文件夹(与 .exe 并排)。
或者,您可以在静态 CRT 模式下构建(例如/MTd
),然后 ASAN 库也将嵌入到 .exe 中。
最后,正如警告所建议的,将 ASAN 与 Debug 构建类型一起使用以获得更好的覆盖范围:
cmake -DCMAKE_BUILD_TYPE=Debug ..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)