我正在尝试使用地址消毒剂与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:warning LNK4302:请将“/debug”添加到LINK命令行,以便更好地报告错误
到目前为止,这么好(?)。
但是,当我运行应用程序时,返回代码是-1073741515(0xC0000135)。谷歌告诉我,这很可能是一个丢失的库。
如果从构建中删除add_definition(/fsanitize=address/zi)
,则返回值为0。丢失的库很可能是地址消毒器本身。
如何正确配置系统以解决此问题?谢谢!
ASAN仍然是MSVC中的一个实验性特性。因此,clang_rt.asan_*.dll
DLL没有作为VC++可再发行包的一部分安装在System32中。
正如这里所解释的,在共享CRT模式(/mdd
)中使用ASAN时,您需要确保clang_rt.asan_dbg_dynamic-x86_64.dll
和clang_rt.asan_dynamic-x86_64.dll
在路径上。
您可以将C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\vc\tools\msvc\14.28.29910\lib\x64
添加到路径中,也可以将DLL复制到项目的输出文件夹(与.exe并列)。
或者,您可以构建静态CRT模式(例如/mtd
),然后ASAN库也将嵌入到.exe中。
最后,如警告所示,请使用带有调试生成类型的ASAN,以获得更好的复盖率:cmake-dcmake_build_type=Debug..