vs2019 C++自带了内存问题检测工具:AddressSanitizer(ASan)

一次 ASAN 找不到 symbolizer 问题的分析与解决 AddressSanitizer(简称 ASAN)一直是一个检测分析 C/C++ 内存问题很方便的工具。WebRTC 工程集成了 ASAN,只要配置一个简单的选项即可对整个工程打开或关闭 ASAN,具体来说是 is_asan 选项。is_asan 选项的默认值为 false,在 args.gn 文件中写入 is_asan = true 行可以对整个工程打开 ASAN,在 args.gn 文件中写入 is_asan = false 行或者不配置 is_asan 选项可以对整个工程关闭 ASAN。 OpenRT 阅读详情
AI摘要

本文介绍如何在Visual Studio 2019中利用AddressSanitizer (ASan) 工具检测C++项目中的内存泄漏、越界等问题。包括配置步骤、常见问题解决方案及定位内存错误的方法。

之前做服务器时,一般是linux下的C++, 
C++容易出很多内存问题:内存泄漏、内存越界、野指针 空指针之类的问题。 
linux下 运行时检测工具,有 valgrind,正常编译debug版,然后附加运行就行了, 就是大程序会有比较卡; 也有 AddressSanitizer(ASan) , 编译后直接运行检测。

最近接触一个windows的C++项目, 之前一直苦于没好用的内存检测工具。 最近再查资料发现,VS2019 新的版本,已经带有 AddressSanitizer(ASan) , 虽然还是在测试阶段。
尝试用了一下,还可以。

1、需要安装一下这个工具:

2、项目的属性里, 开启“启用地址擦除系统”:

如果编译报错,根据错误信息调整一下。(比如之前 Debug 不支持 /ZI ,  不过我升级V16.11.xx之后 就没提醒,但是 遇到内存越界不会报错了,所以一定要改成/Zi)

3、然后运行exe就行了,如果代码有内存问题,会报错。   不过直接运行exe,若检测到读越界、写越界, 程序都会闪退,常看不到信息。 
处理方案:
一个就是 vs直接调试运行,
一个就是 环境变量里加上 ASAN_OPTIONS  halt_on_error=0:log_path=asan.log   
或者 运行的命令行里执行:set ASAN_OPTIONS=halt_on_error=0:log_path=asan.log

出现问题时,会在 当前exe目录下生成 asan.log.xxxx  (文件名自己定的,后面的数字应该是进程号)



遇到的问题:
(1) 这版项目,Debug 版本引用的几个自己编的.DLL 会出Assert  
Debug Assertion Failed: _CrtIsValidHeapPointer(block)
自己的解决办法是,把对应dll 也开启 asan 重新编一下。。。
(2) halt_on_error=0 参数好像作用不大, 程序还是一检测就闪退,我再研究研究。

其他可以找网上的资料, 看看报错了之后如何定位问题
VS2019中使用AddressSanitizer检测内存问题 - 简书

比如它能比较好的定位到 野指针问题。 
某某行代码 访问xxx内存 有问题
这个内存在哪行代码释放掉了
这个内存是在那行代码分配的之类的。

再好好看看自己的代码,大部分能定位出问题来。   (不过还是有些报错很难定位 - -!)
 

官方一些资料:
 AddressSanitizer 已知问题 | Microsoft Docs

【内存】内存检测工具sanitizer[内存泄漏、内存越界] VS valgrind 简介 Sanitizers是谷歌发起的开源工具集,包括了AddressSanitizer, MemorySanitizer, ThreadSanitizer, LeakSanitizer,Sanitizers项目本是LLVM项目的一部分,但GNU也将该系列工具加入到了自家的GCC编译器中。GCC从4.8版本开始支持Address和Thread Sanitizer,4.9版本开始支持Leak Sanitizer和UB Sanitizer,这些都是查找隐藏Bug的利器。 valgrind特点: 这个. 阅读详情

相关推荐

【Asan】新鲜货:使用ASan检测内存越界问题

【Asan】新鲜货:使用ASan检测内存越界问题 新特性出炉 近日,一个新的特性被添加到了MSVC工具集中,这个就是Windows C++开发者梦寐以求的AddressSanitizer(ASan)。为什么这么说:GCC早在4.8就可以支持ASan了,是时候轮到咱大Windows开发者了吧? 啥是ASan? ASan是一个用来快速检测内存错误的工具,它可以找到程序中出现的内存访问违规问题,例如使用已经释放了的内存,内存指针越界访问等。一直以来,ASan支持一直都是开发者社区中呼声较高的一项特性,今天,我们可

qq_43331089的博客 2520

未使用调试信息生成二进制文件 dll_新鲜货:使用ASan检测内存越界问题

新特性出炉近日,一个新的特性被添加到了MSVC工具集中,这个就是Windows C++开发者梦寐以求的AddressSanitizer(ASan)。为什么这么说:GCC早在4.8就可以支持ASan了,是时候轮到咱大Windows开发者了吧?啥是ASan?ASan是一个用来快速检测内存错误的工具,它可以找到程序中出现的内存访问违规问题,例如使用已经释放了的内存,内存指针越界访问等。一直以来,ASan...

weixin_39572972的博客 869

实战演练:在VS2019中利用AddressSanitizer(ASan)精准捕获C++内存越界与泄漏

本文详细介绍了如何在VS2019中使用AddressSanitizer(ASan)检测C++内存问题,包括内存越界和泄漏。通过实战演练和配置指南,帮助开发者快速掌握ASan的使用技巧,提升调试效率。ASan作为高效的内存问题检测工具,特别适合Windows平台下的C++开发。

weixin_34268843的博客 427

安装VS2019以支持ASAN地址消毒

本文介绍如何在Windows平台使用Visual Studio 2019配置ASAN地址消毒器。

老中医的博客 2585

VS2019集成AddressSanitizer:C++内存错误检测实战指南

在C++开发中,内存管理是核心挑战之一,涉及堆、栈和全局变量的分配与释放。其原理在于程序运行时对内存地址的访问必须严格遵循分配边界和生命周期规则,否则会导致缓冲区溢出、释放后使用等严重错误。这类问题的技术价值在于直接影响程序的稳定性、安全性和性能,是高质量软件必须攻克的基础难题。应用场景广泛,从嵌入式系统到大型服务器软件,都需要可靠的内存错误检测机制。AddressSanitizer(ASan)作为一种编译时插桩技术,通过影子内存和运行时检查,能精准定位堆缓冲区溢出、释放后使用等隐蔽错误。本文以Visual

weixin_34356310的博客 279

ASAN vs Valgrind:内存检测工具实战对比(附Linux环境配置指南)

本文深入对比了ASAN与Valgrind两大主流内存检测工具的核心差异与实战应用。ASAN作为编译时插桩的现代方案,性能开销低,能有效检测堆、栈及全局变量的缓冲区溢出和释放后使用等问题;而Valgrind作为运行时二进制插桩的经典工具,无需重新编译,擅长检测未初始化内存使用。文章提供了详细的Linux环境配置指南与编译选项,帮助开发者根据项目需求选择合适工具,提升C/C++程序的稳定性和内存安全性。

h9j8k7l6m5n的博客 888

【C/C++内存问题检测工具】 AddressSanitizer(Asan)介绍与分析

感谢原作者分享,转自:https://zhuanlan.zhihu.com/p/37515148 Google出品的内存检测工具AddressSanitizer介绍与分析 介绍 AddressSanitizer是Google旗下的一个内存问题检测工具,项目地址:https://github.com/google/sanitizers/wiki/AddressSanitizer 它与传统的内...

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 9137

ASan vs Valgrind:Windows/Linux C++内存检测工具3维度性能与精度对比

本文深入对比了ASan和Valgrind两款C++内存检测工具在Windows/Linux平台下的性能与精度。通过3个维度的详细评测(内存泄漏、堆溢出、使用已释放内存),揭示ASan的实时检测优势(2-3倍性能开销)与Valgrind的全面性(10倍以上开销),并提供VS2019集成配置与实战优化建议,帮助开发者高效排查内存问题。

weixin_26833139的博客 252

C++查找bug之利器AddressSanitizer的配置

AddressSanitizer (ASan) 是查找c++程序错误的神器。从 Visual Studio 2019 版本 16.9 开始,Microsoft C/C++ 编译器 (MSVC) 和 IDE 支持AddressSanitizer清理器。关于AddressSanitizer的详细介绍请查看微软官方对它的介绍配置条件:win11系统, clion c++语言,msvc工具链,debug模式测试代码从这个报告可以看出是什么错误引起的:- 堆缓冲区溢出,即访问了堆上分配的缓冲区的边界之外的内存。

hyl20012的专栏 1034

【Linux】使用AddressSanitizer分析内存非法使用问题

AddressSanitizer是进行内存异常使用分析的工具,该工具已经集成到编译器中,因此,只能用于分析C/C++语言的内存问题分析。与Valgrind相比,运行速度更快,但是,从场景来说,AddressSanitizer主要用于检测内存的非法使用,当然也包括内存未正确释放的问题,而Valgrind则可以分析出导致内存增长的调用栈。如果出现内存偏高的问题,可以使用Valgrind工具分析如果出现内存导致的core问题,可以使用gdb的watchpoint或者AddressSanitizer分析。

追寻梦想的青春 2647

C++内存检测利器AddressSanitizer:原理、配置与实战指南

内存管理是C++开发中的核心挑战,内存错误如缓冲区溢出、使用已释放内存等常导致程序崩溃或安全漏洞。AddressSanitizer(ASan)作为编译时插桩工具,通过影子内存和红区机制,在运行时以约2倍性能开销动态检测数十类内存问题。其技术价值在于将传统需要数天调试的幽灵Bug转化为即时可定位的错误报告,极大提升了开发效率。在应用场景上,ASan已集成到主流编译器(GCC、Clang、MSVC),支持Linux与Windows平台,并可无缝融入CI/CD流程,实现自动化内存安全测试。本文聚焦ASan的核心原

weixin_33739646的博客 400

Linux平台内存泄漏检测工具介绍: ASan vs Valgrind

经过我们的实际测试发现,Valgrind 在检测内存泄漏时比较准确,通过了三个简单的测试用例;aSan则没有正确检测出第三个用例中的内存泄漏; 不过,aSan 的功能更加丰富,比如示例4中可以检查内存越界,但是Valgrind只能检查内存越界问题。

m0_熊猫馆主的博客 1576

VS2019 IDE,AddressSanitizer,检测C++代码内存问题

【代码】VS2019 IDE,AddressSanitizer,检测C++代码内存问题。

MusicScore的博客 770

Linux编程:使用 AddressSanitizer (ASan) 进行C/C++内存错误检测

AddressSanitizer(ASan)是内存错误检测的强大工具,本文将介绍如何在 ARM64 系统中有效配置和使用 ASan,同时提供一个示例程序的检测流程。

Where there is life, there is hope. 6347

VS2019 16的ASAN常用选项

Goolge ASAN在VS2019 16版本以后得以支持,可以用来定位开发时遇到的大多内存问题,诸如栈、堆、全局变量越界、alloc-dealloc-mismatch、allocation-size-too-big、new-delete-type-mismatch、heap-use-after-free、stack-use-after-scope、stack-use-after-return、use-after-free、use-after-return、dynamic initialization。本文档提供的是基于VS2019的ASAN常用选项。

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 403

面向开发的内存调试神器,如何使用ASAN检测内存泄漏、堆栈溢出等问题

* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。介绍如何使用 ASAN检测内存泄漏检测悬空指针访问检测堆溢出C++ 中的new/delete不匹配检测栈溢出检测全局缓冲区溢出ASAN 的基本原理代码插桩运行时库总结介绍首先,先介绍一下 Sanitizer 项目,该项目是谷歌出品的一个开源项目,该项目包含了 ASAN、LSAN、MSAN、TSAN等内存、线程错误的检测...

老叶茶馆 4003

模型检测--工具KeYmaera

论文:KeYmaera: A Hybrid Theorem Prover for Hybrid Systems 作者:Andre Platzer and JanKeYmaera摘要1 介绍2用于混合系统的KeYmaera验证工具3混合系统,混合自动机和混合程序 摘要 KeYmaera是一种用于混合系统的混合验证工具,它结合了演绎,实数代数和计算机代数证明者技术。它是自然的自动和交互式定理证明器 混合系统的规范和验证逻辑。 KeYmaera支持差分动态逻辑,它是用于混合程序的实值一阶动态逻辑,是混合自动机的程

ziigea的博客 1077

VS2019 16.9+ AddressSanitizer 实战:3步开启C++内存检测,捕获5类常见错误

本文详细介绍了如何在VS2019 16.9+中使用AddressSanitizer(ASan)进行C++内存检测,通过三步配置快速启用ASan,精准捕获堆栈缓冲区溢出、释放后使用等5类常见内存错误。ASan作为Windows平台的高效内存检测工具,具有检测全面、性能开销低等优势,是C++开发者提升代码质量的利器。

weixin_33700809的博客 310

非模式物种PySCENIC分析流程

外的物种想要做scenic分析的话, 可以使用同源基因转换后再进行分析, 将要分析的物种的gene Symbol转换为人、小鼠或者是果蝇的gene Symbol后进行分析。odiscus sinensis(中华鳖)的基因-细胞的矩阵,进行pyscenic分析的话,可参考以下示例。目前pyscenic分析支持的物种仅为人、小鼠和果蝇,其他物种暂时还没有相应的数据库,因。本教程基于Linux及服务。SCENIC转录因子分析。器中的Rstudio环境。例如我们有一个Pel。

weixin_47195452的博客 934

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

vs mwarray 访问异常_内存访问违规利器:AddressSanitizer (ASan)

新特性出炉近日,一个新的特性被添加到了MSVC工具集中,这个就是Windows C++开发者梦寐以求的AddressSanitizer(ASan)。为什么这么说:GCC早在4.8就可以支持ASan了,是时候轮到咱大Windows开发者了吧?啥是ASan?ASan是一个用来快速检测内存错误的工具,它可以找到程序中出现的内存访问违规问题,例如使用已经释放了的内存,内存指针越界访问等。一直以来,ASan...

weixin_29532075的博客 776

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization)

量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。

学习,输出==》再学习再输出 1215
上一篇: [unity]【UGUI】UI经常换,代码尽量不改的方案; 同时也减少GameObject.Find的调用,方便程序开发时直接访问节点对象
下一篇: C#实现不规则图形分割成多个矩形组合可视化工具, 核心是一个找最大内切矩形的算法
zhenmu
博客等级 码龄24年 71粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值