当前位置: 首页 > 知识库问答 >
问题:

使用MSVC地址清理时崩溃

荆乐
2023-03-14

我正在尝试使用地址消毒剂与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。丢失的库很可能是地址消毒器本身。

如何正确配置系统以解决此问题?谢谢!

共有1个答案

金珂
2023-03-14

ASAN仍然是MSVC中的一个实验性特性。因此,clang_rt.asan_*.dllDLL没有作为VC++可再发行包的一部分安装在System32中。

正如这里所解释的,在共享CRT模式(/mdd)中使用ASAN时,您需要确保clang_rt.asan_dbg_dynamic-x86_64.dllclang_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..

 类似资料:
  • 地区管理 商家可以在后台添加地址,完善地址库,包括全国省市区等。 添加子地区 商家地址 填写商家的收获地址、收件人地址、电话、邮编等信息,用于买家退货邮寄地址。

  • 从虚拟内存到物理内存 虚拟地址和物理地址 到目前为止,我们简易的操作系统还只是一个内核在执行,还没有多任务的概念。在现代的操作系统中,为了让其他的程序能方便的运行在操作系统上,需要完成的一个很重要的抽象是「每个程序有自己的地址空间,且地址空间范围是一样的」,这将会减少了上层程序的大量麻烦,否则程序本身要维护自己需要的物理内存,这也会导致极大程度的不安全。 这个执行上看到的地址空间,就是虚拟内存。而

  • 问题内容: 在我的socket.io代码中, ip始终返回127.0.0.1,这是因为服务器位于代理后面。如何正确获取远程地址? 编辑:我正在使用http代理 问题答案: 是的,这对我有用。 我正确获取了远程IP地址而不是127.0.0.1

  • 我使用getStringArrayListExtra()搜索将列表从一个活动传输到另一个活动。这在第一次(从MainActivity到Diag2Activity)时运行良好,但在第二次(从Diag2Activity到SSToActivity)时应用程序崩溃。 每次我使用相同的方法:第一次活动: 第二项活动: 谁能告诉我错误可能来自哪里?提前谢谢 请在下面找到完整的代码: 主要活动。JAVA } 主

  • 7. 回调地址管理 用于管理回调的地址,在该页面可设置相关信息:

  • 问题内容: 我在Windows XP Pro上使用Glassfish 3.0.1,JVM 1.6.0_21; 我不知道我的环境到底发生了什么变化,但是当我尝试部署企业应用程序(ejb模块+应用程序客户端模块)时,我立即获得了该堆栈跟踪信息。 除Glassfish之外,端口3820上没有任何运行。 这可能是什么原因?一些内部过程冲突? 关于如何进一步调试的任何提示? 编辑 这正是我尝试过的: 如您所