Bkt*_*ero 14 c++ visual-studio
我正在尝试将地址清理程序与 MSVC 一起使用。
Visual Studio 安装程序显示我有“Visual Studio Community 2019”版本 16.9.0。
我有最基本的C++程序:
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
程序在调试和发布模式下都能正确编译和链接。在发布模式下,我收到以下警告,这似乎完全合法:
LINK:警告 LNK4302:请将“/DEBUG”添加到链接命令行以获得更好的 ASAN 错误报告
到目前为止,一切都很好 (?)。
但是,当我运行该应用程序时,返回代码为-1073741515 (0xC0000135)。谷歌告诉我这可能表明缺少一个库。
如果我add_definitions(/fsanitize=address /Zi)从构建中删除,返回值为 0。丢失的库很可能是地址清理程序本身。
如何正确配置我的系统来解决此问题?谢谢!
rus*_*tyx 22
ASAN 是一种调试功能。因此,clang_rt.asan_*.dllDLL 不会作为 VC++ 可再发行软件包的一部分安装在 System32 中。
如此处所述,在共享 CRT 模式 ( /MDd) 下使用 ASAN 时,您需要确保clang_rt.asan_dbg_dynamic-x86_64.dll和clang_rt.asan_dynamic-x86_64.dll位于 PATH 上。
您可以将C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64DLL 添加到 PATH 或将其复制到项目的输出文件夹(与 .exe 并排)。
在 Visual Studio 2022 版本 17.7 Preview 3 之前,您可以选择以静态 CRT 模式(例如/MTd)进行构建,这会将 ASAN 库嵌入到 .exe 中。较新版本的 Visual Studio始终需要单独的 DLL。
最后,正如警告所建议的,将 ASAN 与 Debug 构建类型一起使用以获得更好的覆盖范围:
cmake -DCMAKE_BUILD_TYPE=Debug ..
在 Visual Studio 22 中,dll 的位置已更改。就我而言,我需要 i386 版本。的位置clang_rt.asan_dbg_dynamic-i386.dll是:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\<version>\bin\Hostx86\x86.C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\<version>\bin\Hostx64\x64\必须将其添加到 PATH 变量(或复制到 exe 目录)以防止出现此错误。如果针对 x64 进行调试,请采用 64 位版本。
| 归档时间: |
|
| 查看次数: |
8676 次 |
| 最近记录: |