vs2019 C++自带了内存问题检测工具:AddressSanitizer(ASan)
之前做服务器时,一般是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
vs2019 C++自带了内存问题检测工具:AddressSanitizer(ASan)相关推荐
- 内存错误检测工具AddressSanitizer原理
原论文:AddressSanitizer: A Fast Address Sanity Checker 谷歌官方文档:AddressSanitizerAlgorithm 参考博客:Introducti ...
- iOS开发之内存泄漏检测工具-Leaks
引言 我们在实际开发过程中,经常会不小心造成循环引用问题,从而造成内存泄漏问题,那么我们该如何检测我们工程那个位置存在内存泄漏问题呢?这就需要用到Xcode自带的内存泄漏检测工具-Leaks. 内存泄 ...
- win10系统自带的计算机无法使用吗,Win10如何使用系统自带的硬件设备检测工具?...
Win10如何使用系统自带的硬件设备检测工具?在Win10操作系统中,自带有硬件设备检测工具,当我们遇到电脑故障时,可以使用这些检测工具来处理故障.下面小编就来教大家使用电脑自带的硬件设备检测工具! ...
- Android内存泄漏检测工具使用手册
Android内存泄漏检测工具使用手册 前言 LeakCanary 在Android中接入LeakCanary LeakCanary内存泄漏分析 内存泄漏上报到服务端 Shark Shark分析当前应 ...
- 计算机自带的配置检测,Windows10系统自带电脑硬件设备检测工具的使用步骤
windows10系统在使用过程中,有时候会遇到一些系统故障,那么我们可以使用自带的电脑硬件设备检测工具来进行处理,但是很多用户不知道Windows10系统自带电脑硬件设备检测工具如何使用,本文就给大 ...
- 计算机自带的配置检测,Win10如何使用系统自带的硬件设备检测工具?
Win10如何使用系统自带的硬件设备检测工具?在Win10操作系统中,自带有硬件设备检测工具,当我们遇到电脑故障时,可以使用这些检测工具来处理故障.下面小编就来教大家使用电脑自带的硬件设备检测工具! ...
- Linux中的常用内存问题检测工具
原文地址:http://blog.csdn.net/jinzhuojun/article/details/46659155 C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种 ...
- 几种内存泄露检测工具的比较
概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却 ...
- 内存问题检测工具的介绍
C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.但是,在这样灵活操作的后面,还隐藏着很危险的操作,那就是关于内存的问题.一看到内存的问题,大部分的初学者就开始傻 ...
最新文章
- List Tuple Dictionary 区别
- css中background-image背景图片路径设置
- 用_beginthreadex不用 CreateThread
- 「Python」pycharm多项目虚拟环境切换
- oracle允许空行,oracle用户权限的一些基本操作
- linux文件存储、inode、硬链接、软链接
- Android 功耗( 21 )---MTK 低功耗1
- Java基础学习——安装JDK
- PyTorch 深度学习:32分钟快速入门——DenseNet
- java的多态代码例子_java 多态实例代码
- ES6解析彩票项目学习记录(二)
- 看了看几个数据库厂商的发展历史
- 程序入口地址的直接定制表【 (1) 清屏(2) 设置前景色 (3) 设置背景色 (4) 向上滚动一行】...
- FL Studio 12是什么软件?Mac音乐制作软件推荐FL Studio 12 for Mac!
- 最新JAVA+Python+大数据资料分享
- 如何解决python 画图时 it could not find or load the Qt platform plugin “windows“ in “”的问题
- Java Method 类
- Django新手十个开发指导
- python中pymysql的小坑
- 解决在IDEA中进行结巴分词产生Exception in thread “main“ ExceptionInInitializerError at ()错误